部分加载具有不同编码的大文本文件

时间:2009-06-12 02:45:04

标签: java text encoding load large-files

我正在编写一个Java文本组件,并试图在中间部分加载一些大文本文件(出于速度原因)。

我的问题是文本是否采用多字节编码格式,如UTF8,Big5,GBK等。如何对齐字节以便我能正确解码文本?

2 个答案:

答案 0 :(得分:2)

我不能说其他格式,但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,第4,第5,第6组中,那么你知道你是在一个角色的开头。从那里继续进行。

答案 1 :(得分:0)

除了Jeremy对UTF-8的评论之外,对于UTF-16这样的编码,您可以使用一些常识性启发式方法来判断您是否具有正确的对齐方式。例如,如果你基本上期待拉丁字符加上奇怪的异国情调,那么你的一半字符就会出现在256以上,你可能会错误地对齐......