我正在使用MultiByteToWideChar将UTF-8编码的流转换为宽字符。如果字符不完整且转换缓冲区结束,则此函数将其替换为“?”标志。 我应该实现哪些检查/设置来检测不完整的字符,以便将它们添加到下一个缓冲区?
答案 0 :(得分:1)
如果您查看Wikipedia entry on UTF8,可以使用一个方便的表来显示多字节配置的可能类型。 UTF8的关键是初始字节都遵循一组位模式,而后续字节都遵循另一个位模式。值得注意的是,所有后续字节都具有位模式10xxxxxx。
您似乎可以通过从字符串末尾向后扫描找到合适的断点,直到找到与10xxxxxx不匹配的字节为止;如果该字节是0xxxxxxx,那么在该字节之后结束字符串(因为它是单字节序列),否则在它之前/之前结束字符串(因为它是多字节序列的开始),并添加字节(s )之后到下一个字符串的开头。
答案 1 :(得分:0)
how they do it in Python 不幸的是,这似乎是错误的,因为它们只检测单个位置的前导字节,而它可能是三个或四个字节长字符的一部分,因此更难找到:(
此外,该方法仅适用于少数选定的编码says documentation on IsDBCSLeadByteEx。而this article explains why,但不会让生活变得更轻松。