当前位置: 首页 > 知识库问答 >
问题:

检测从缓冲区读取的部分或不完整字符

南宫才英
2023-03-14

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

是否有一种方法来检测字符串是否以不完整的字符结尾,或者对字符串的最后一个字符进行检查以确定这一点?

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

共有1个答案

禄源
2023-03-14

如果缓冲区以一个不完整的字符结束,您将其转换为字符串,然后从该字符串初始化新缓冲区,则新缓冲区的长度将与原始缓冲区不同(如果使用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块中)。

 类似资料:
  • 我已经找了几个小时来解决我的问题。首先我有高清7800系列amd GPU,最新的驱动程序。 我正在尝试创建一个framebuffer类,它拥有我需要的所有framebuffer函数。看起来我让renderbuffers开始工作了,但绘制到纹理会导致非常奇怪的错误。 GLCHECKFRAMEBERSTATUS在两次检查时返回GL_FRAMEBUFFER_Completed_附件。createDept

  • 问题内容: 我正在尝试从FTP服务器读取文件。该文件是一个文件。我想知道在套接字打开的情况下是否可以对此文件执行操作。我试图按照什么分两个问题,提到的阅读文件,而不写入磁盘和读取从FTP文件,而无需下载,但没有成功。 我知道如何提取下载文件上的数据/工作,但不确定是否可以即时执行。有没有一种方法可以连接到站点,在缓冲区中获取数据,还可以提取某些数据并退出? 尝试StringIO时出现错误: 我只需

  • 问题内容: 我知道 bufio 包中的golang中的特定功能。 Peek返回下一个n个字节, 而不会使阅读器前进 。在下一个读取调用中,字节停止有效。如果Peek返回的字节数少于n个字节,则它还会返回一个错误,解释读取短的原因。如果n大于b的缓冲区大小,则错误为ErrBufferFull。 我需要能够从阅读器读取特定数量的字节,以 使阅读器更先进 。基本上,与上面的功能相同,但是它使阅读器更高级

  • 问题内容: 需要帮忙。有一个名为arglist的数据列表,例如:[‘dlink’,’des’,‘1210’,’c’,24] <-这就是“打印”视图。 这段代码: 它给: 怎么了? 问题答案: 当json.loads需要一个字符串时,您正在尝试加载文件对象。您可以使用 或者更好: 在第一个示例中,文件是打开的,但从未关闭(不好的做法)。在第二个示例中,上下文管理器在离开上下文块后关闭文件。

  • 我目前正在查看CPU管道中可以检测分支错误预测的各个部分。我发现这些是: 分支目标缓冲区(BPU CLEAR) 分支地址计算器(BA CLEAR) 跳转执行单元(不确定此处的信号名称??) 我知道2和3检测到什么,但我不知道BTB中检测到什么预测失误。BAC检测BTB错误地预测了非分支指令的分支,BTB未能检测到分支,或者BTB错误预测了x86 RET指令的目标地址。执行单元评估分支并确定它是否正

  • 本文向大家介绍Java缓冲读取器,包括了Java缓冲读取器的使用技巧和注意事项,需要的朋友参考一下 示例 介绍 该BufferedReader班是以外的包装Reader是有两个主要目的类: ABufferedReader为包装的提供缓冲Reader。这允许应用程序一次读取一个字符,而不会产生过多的I / O开销。 一个BufferedReader用于一次读取文本行提供的功能。 使用Buffered