c#中的encoding.utf8.getbytes问题

时间:2009-11-13 16:07:43

标签: c#

我正在使用C#,尝试下面的代码

byte[] buffer = new byte[str.Length];
buffer = Encoding.UTF8.GetBytes(str);

在str中,我有很长的数据但是我在获取完整的编码字节时遇到了问题。 请告诉我出了什么问题,我该如何克服这个问题?

3 个答案:

答案 0 :(得分:6)

为什么要创建一个新的字节数组然后忽略它?在调用buffer之前GetBytes的值被替换为对GetBytes返回的新字节数组的引用。

但是,您不应期望字符串的UTF-8编码版本的字节长度与原始字符串的字符长度相同,除非它是全部ASCII。 U + 007F上的任何字符至少占用2个字节。

这里的大局是什么?你想要实现什么,为什么字节数组的长度对你很重要?

答案 1 :(得分:2)

正确使用是:

 byte[] buffer = Encoding.UTF8.GetBytes(str);

答案 2 :(得分:0)

通常,在使用编码,字节和字符/字符串时,不应对长度/大小/计数做任何假设。让Encoding对象完成它们的工作,然后查询该信息的结果对象。

话虽如此,我不相信编码类有固有的长度限制。我有几个生产应用程序在相反的方向上执行相同的工作(字节编码为字符),它们处理10兆字节的字节数组。