从utf-16到ascii的C#编码

从utf-16到ascii的C#编码,c#,C#,我的程序输出中有问号: string str = "Привет медвед"; Encoding srcEncodingFormat = Encoding.GetEncoding("utf-16"); Encoding dstEncodingFormat = Encoding.ASCII; byte [] originalByteString = srcEncodingFormat.GetBytes(str); byte []

我的程序输出中有问号:

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

没有文本,只有编码文本。但是,.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);

ASCII没有这些字符。很确定,这是因为控制台无法显示西里尔文,而不是您的方法有问题。Crowcoder,谢谢您的链接,但我的英语很差:(为什么我的输入字符串在写入时不会改变:string str=“ПППцц”;Encoding srccodingformat=Encoding.GetEncoding(“utf-16”);Encoding dstEncodingFormat=Encoding.GetEncoding(“koi8-r”);如何查看编码结果。转换西里尔字母?您只需使用
编码。ASCII
;无需从字符串中查找它。@nErguds关键是获取一种编码,该编码在未满足期望时引发异常(错误)而是那些通过删除数据来破坏用户文本的理论,即有些比没有好。我并不完全赞同这种理论。那些编码确实插入了标记字符� 或者?向用户表明数据丢失,但程序员从未发现他们弄糟了。(是的,有些情况下要求删除数据,但在大多数情况下,音译比数据丢失更可取。)@nErguds一些构造函数具有等效参数,但AscienceODing没有。例如:IMO,
throwOnInvalidBytes
应为默认值。