我在将文本转换为UTF-8编码时出现问题。这里我有字节数组,
byte[] c = new byte[] { 1, 2, 200 };
我将其转换为UTF-8字符串并返回字节数组
Encoding.UTF8.GetBytes(Encoding.UTF8.GetString(c));
根据我的理解,我应该期待的是一个3字节的数组。对?但这就是我所得到的。
byte[5] { 1, 2, 239, 191, 189 }
原因是什么?
我了解239, 191, 189
中的REPLACEMENT CHARACTER
组合称为{{1}}。
这也是一个更大问题的一部分。
答案 0 :(得分:2)
并非所有字节序列都是有效的UTF-8。您的数组(1,2,200)似乎在UTF-8中无效(这就是添加此特殊错误字符的原因)
MSDN说有关Encoding.UTF8:它返回一个提供Unicode字节顺序的UTF8Encoding对象 标记(BOM)。要实例化不提供BOM的UTF8编码, 调用UTF8Encoding构造函数的任何重载。
1)您的示例中没有BOM(https://en.wikipedia.org/wiki/Byte_order_mark)。
2)200 - 一个前导字节。必须跟着足够的连续字节