为什么这一行
System.Text.Encoding.UTF8.GetBytes("ABCD±ABCD")
给我10个字节而不是9个字节? 虽然±是char(177)
是否有.Net函数/编码将此字符串正确转换为9个字节?
答案 0 :(得分:6)
虽然±是char(177)
UTF-8编码为0xc2 0xb1 - 两个字节。基本上,每个代码点> = 128将占用多个字节 - 其中字节数取决于代码点的大小。
当使用UTF-8编码时,数据为10字节。这里的错误是你期望它应该花费9。
答案 1 :(得分:5)
您应该使用Windows-1251
编码将±
作为177
var bytes = System.Text.Encoding.GetEncoding("Windows-1251").GetBytes("ABCD±ABCD");
答案 2 :(得分:1)
±
落在ASCII范围的一边,因此用2个字节表示。
答案 3 :(得分:1)
此视频很好地解释了utf-8编码:http://www.youtube.com/watch?v=MijmeoH9LT4。看完之后你就会意识到为什么它会导致更多的字节,你想。