UTF-8编码和解码问题

时间:2017-05-15 09:12:26

标签: c# asp.net-web-api encoding utf-8

我在将文本转换为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}}。

这也是一个更大问题的一部分。

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 - 一个前导字节。必须跟着足够的连续字节