从 utf-16 到 ascii 的 C# 编码

本文关键字:编码 ascii utf-16 | 更新日期: 2023-09-27 18:32:43

我在程序输出中得到问号:?????? ??????

 string str = "Привет медвед";
        Encoding srcEncodingFormat = Encoding.GetEncoding("utf-16");
        Encoding dstEncodingFormat = Encoding.ASCII;
        byte [] originalByteString = srcEncodingFormat.GetBytes(str);
        byte [] convertedByteString =  Encoding.Convert(srcEncodingFormat,
                                                       dstEncodingFormat, originalByteString);
        string finalString = dstEncodingFormat.GetString(convertedByteString);
        Console.WriteLine (finalString);

从 utf-16 到 ascii 的 C# 编码

没有文本,只有编码文本。但。如您所知,NET 的字符和字符串使用 Unicode/UTF-16。因此,您可以通过调用 GetBytes 并传入字符串来简化代码,而不是像代码那样执行两次。

至于您的问题,您可以选择有损转换或根本不转换。下面是防止有损转换的代码。

现在,如何查看结果?与所有文本一样,它是一个字节序列。最好的办法是将它们写入文件,然后在编辑器中打开该文件,您可以指示编码,并且可以使用支持要查看的字符的字体。

string str = "Привет медвед";
Encoding dstEncodingFormat = Encoding.GetEncoding("US-ASCII", 
    new EncoderExceptionFallback(), 
    new DecoderReplacementFallback());
byte[] output = dstEncodingFormat.GetBytes(str);
File.WriteAllBytes("Test Привет медвед.txt", output);