System.Text.Encoding.UTF8.GetBytes Extra Byte

K. *_*R. 1 .net c# vb.net utf-8 character-encoding

为什么这一行

System.Text.Encoding.UTF8.GetBytes("ABCD±ABCD")
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*ell 6

虽然±是char(177)

UTF-8编码为0xc2 0xb1 - 两个字节.基本上,每个代码点> = 128将占用多个字节 - 其中字节数取决于代码点的大小.

当用UTF-8编码时,该数据是10个字节.这里的错误是你的期望,它应该需要9.


L.B*_*L.B 5

您应该使用Windows-1251的编码得到±177

var bytes = System.Text.Encoding.GetEncoding("Windows-1251").GetBytes("ABCD±ABCD");
Run Code Online (Sandbox Code Playgroud)