ASCIIEncoding.ASCII.GetBytes()ReturnsUnexpectedValueThisC#code...strings="u00C0";byte[]bytes=ASCIIEncoding.ASCII。获取字节数;Trace.WriteLine(BitConverter.ToString(bytes));产生以下输出:3F为什么输出不是C0?因为u00c0不是ASCII(0-127范围)。原来它编码的东西像问号-?(0x3F)。有关ASCIIEncoding的信息,请参阅MSDN文章:ASCIIEncoding对应于Windows代码页20127。由于ASCII是7位编码,因此ASCII字符被限制为最少128个Unicode字符,从U+0000到U+007F。如果使用Encoding.ASCII属性或ASCIIEncoding构造函数返回的默认编码器,则在执行编码操作之前,此范围之外的字符将替换为问号(?)。您似乎想要表示Unicode字符串的字节序列。显然字节将取决于编码。由于您希望C0成为这些字节之一,因此它稍微缩小了选项范围。这是UTF16LE,当然是两个字节,因为u00c0正好代表一个BMP字符:strings="u00C0";byte[]bytes=Encoding.Unicode.GetBytes(s);Trace.WriteLine(BitConverter.ToString(bytes));您应该阅读JoelSpolsky的关于您必须知道的Unicode和字符集的绝对最低要求(没有借口!)第1步:将unicode字符分配给字符串,然后将其转换为ASCII(但它是unicode)。然后您尝试使用unicode转换器将其转换回来。以下示例尽一切可能使我的响应更清晰:staticvoidMain(string[]args){strings="u00C0";控制台.WriteLine(s);byte[]bytes=ASCIIEncoding.ASCII.GetBytes(s);Console.WriteLine(BitConverter.ToString(bytes));Console.WriteLine(ASCIIEncoding.ASCII.GetString(bytes));Console.WriteLine("再次");bytes=Encoding.UTF8.GetBytes(s);Console.WriteLine(BitConverter.ToString(bytes));Console.WriteLine(Encoding.UTF8.GetString(bytes));控制台.ReadLine();}输出是:A3F?同样C3-80A顺便说一下,BitConverter.GetBytes的定义是:将指定字节数组的每个元素的数值转换为其等效的十六进制字符串表示形式。以上就是C#学习教程:ASCIIEncoding.ASCII.GetBytes()返回意外值共享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
