3

在一个循环中,我正在读取一个流,该流被编码为 UTF-8,每个循环中有 10 个字节(比如说)。由于首先将流传递到缓冲区,因此我必须在将其转换为 UTF-8 字符串之前以字节为单位指定其读取长度。我面临的问题是,有时它会读取部分、不完整的字符。我需要解决这个问题。

有没有办法检测字符串是否以不完整的字符结尾,或者我可以对字符串的最后一个字符执行一些检查来确定这一点?

最好是“非单一编码”解决方案。

4

1 回答 1

0

如果缓冲区以不完整的字符结尾,然后将其转换为字符串,然后从该字符串初始化新缓冲区,则新缓冲区的长度将不同(如果使用 utf8,则更长,如果使用 ucs2,则更短)比原来的。

就像是:

var b1=new Buffer(buf.toString('utf8'), 'utf8');
if (b2.length !== buf.length) {
   // buffer has an incomplete character
} else {
   // buffer is OK
}

将您想要的编码替换为“utf8”。

请注意,这取决于当前的实现如何Buffer#toString处理不完整的字符,这没有记录在案,尽管它不太可能以导致等长缓冲区的方式进行更改(未来的实现可能会引发错误,所以您可能应该将代码包装在 try-catch 块中)。

于 2012-08-17T20:23:00.900 回答