我正在使用C#,尝试下面的代码
byte[] buffer = new byte[str.Length];
buffer = Encoding.UTF8.GetBytes(str);
在str中,我有很长的数据但是我在获取完整的编码字节时遇到了问题。 请告诉我出了什么问题,我该如何克服这个问题?
答案 0 :(得分:6)
为什么要创建一个新的字节数组然后忽略它?在调用buffer
之前GetBytes
的值被替换为对GetBytes返回的新字节数组的引用。
但是,您不应期望字符串的UTF-8编码版本的字节长度与原始字符串的字符长度相同,除非它是全部ASCII。 U + 007F上的任何字符至少占用2个字节。
这里的大局是什么?你想要实现什么,为什么字节数组的长度对你很重要?
答案 1 :(得分:2)
正确使用是:
byte[] buffer = Encoding.UTF8.GetBytes(str);
答案 2 :(得分:0)
通常,在使用编码,字节和字符/字符串时,不应对长度/大小/计数做任何假设。让Encoding对象完成它们的工作,然后查询该信息的结果对象。
话虽如此,我不相信编码类有固有的长度限制。我有几个生产应用程序在相反的方向上执行相同的工作(字节编码为字符),它们处理10兆字节的字节数组。