在一个循环中,我正在读取一个流,在每个循环中编码为UTF-8,10个字节(比方说)。当流首先传递给缓冲区时,我必须在将其转换为UTF-8字符串之前指定其读取长度(以字节为单位)。我面临的问题是,有时它会读取部分不完整的字符。我需要解决这个问题。
有没有办法检测字符串是否以不完整的字符结尾,还是检查我可以对字符串的最后一个字符执行哪些操作来确定?
最好是“非单一编码”解决方案。
答案 0 :(得分: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块中。)