C#从utf-16编码到ascii

时间:2016-02-01 16:25:11

标签: c#

我的程序输出中出现问号:?????? ??????

 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);

1 个答案:

答案 0 :(得分:0)

没有文字,只有编码文字。但是,正如您所知,.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);