我有无限大小的UTF8 byte[]
(即非常大的)。我想将其截断为1024
个字节,然后将其转换为字符串。
Encoding.UTF8.GetString(byte[], int, int)
为我做了这件事。它首先缩短1024
个字节,然后给我转换后的字符串。
但是在这个转换中,如果最后一个字符是UTF8字符集,由2个字节组成,其第一个字节在范围内而另一个字节超出范围,那么它在转换时显示该字符的?
字符串。
有没有办法让这个?
没有转换成字符串?
答案 0 :(得分:6)
这就是Decoder
类的用途。它允许您将byte
数据流式传输到char
数据,同时保持足够的状态以正确处理部分代码点:
Encoding.UTF8.GetDecoder().GetChars(buffer, 0, 1024, charBuffer, 0)
当然,当代码点在中间分割时,Decoder
在其状态中留下“部分字符”,但这与您的情况无关(并且在所有其他用例:))。