System.Text.Encoding.UTF8.GetBytes Extra Byte

时间:2013-09-26 19:22:25

标签: c# .net vb.net utf-8 character-encoding

为什么这一行

System.Text.Encoding.UTF8.GetBytes("ABCD±ABCD")

给我10个字节而不是9个字节? 虽然±是char(177)

是否有.Net函数/编码将此字符串正确转换为9个字节?

4 个答案:

答案 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。看完之后你就会意识到为什么它会导致更多的字节,你想。