我正在编写一个 Java 文本组件,并试图在中间部分加载一些大文本文件(出于速度原因)。
我的问题是文本是否采用某种多字节编码格式,如 UTF8、Big5、GBK 等。如何对齐字节以便正确解码文本?
我正在编写一个 Java 文本组件,并试图在中间部分加载一些大文本文件(出于速度原因)。
我的问题是文本是否采用某种多字节编码格式,如 UTF8、Big5、GBK 等。如何对齐字节以便正确解码文本?
我不能代表其他格式,但 utf8 应该不会太难。
只需查看您抓取的块的第一个字节,然后从那里找出:
摘自维基百科:
00000000-01111111 00-7F 0-127 US-ASCII (single byte)
10000000-10111111 80-BF 128-191 2'nd, 3rd, or 4'th byte of a multi-byte sequence
11000000-11000001 C0-C1 192-193 start of a 2-byte sequence, but code point <= 127
11000010-11011111 C2-DF 194-223 Start of 2-byte sequence
11100000-11101111 E0-EF 224-239 Start of 3-byte sequence
11110000-11110100 F0-F4 240-244 Start of 4-byte sequence
如果字节在第 2 组或第 3 组中,那么您知道您错过了字符的一部分。如果它在 1'st,4'th,5'th,6'th 组中,那么您知道您处于角色的开头。从那里相应地进行。
除了 Jeremy 对 UTF-8 的评论之外,对于 UTF-16 等编码,您可以使用一些常识性启发式方法来确定您是否获得了正确的对齐方式。例如,如果您基本上期望拉丁字符加上奇怪的异国情调的一个半字符出现在 256 以上,那么您可能有错误的对齐方式......