1

我正在使用MultiByteToWideChar将 UTF-8 编码流转换为宽字符。当存在不完整字符和转换缓冲区结束时,此函数将其替换为“?” 符号。我应该实施哪些检查/设置来检测不完整的字符,以便将它们添加到下一个缓冲区?

4

2 回答 2

1

如果您查看UTF8 上的 Wikipedia 条目,有一个方便的表格显示了多字节配置的可能类型。UTF8 的关键在于初始字节都遵循一组位模式,而后续字节都遵循另一个位模式。值得注意的是,所有后续字节都具有位模式 10xxxxxx。

似乎可以通过从字符串末尾向后扫描,直到找到与 10xxxxxx 不匹配的字节来找到合适的断点;如果该字节为 0xxxxxxx,则在该字节之后结束字符串(因为它是单字节序列),否则在它/之前结束字符串(因为它是多字节序列的开始),并添加字节(s ) 之后到下一个字符串的开头。

于 2011-08-07T06:19:21.193 回答
0

他们如何在 Python 中做到这一点 不幸的是,这似乎是错误的,因为他们只检测单个位置的前导字节,而它可能是三或四字节长字符的一部分,因此更难定位:(

此外,该方法仅适用于少数选定的编码,IsDBCSLeadByteEx 上的文档说这篇文章解释了原因,但并没有让生活变得更轻松。

于 2011-08-06T12:17:30.910 回答