我对结构如下的 UTF8 文件有以下问题:
FIELD1§FIELD2§FIELD3§FIELD4
查看它使用 A7
编码 §
的文件的十六进制值。所以根据这个编码应该是UTF8,但是很奇怪因为A7
> 7F
所以1个字节应该不足以编码§
。
所以我尝试直接使用具有指定字符集的 BufferedReader
:
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(input), utf8))
但是当我尝试用
标记字符串时SmartTokenizer st = new SmartTokenizer(toTokenize, "§")
(SmartTokenizer
是保留空标记的 StringTokenizer
的修改版本)
没有 split 发生,如果我尝试打印我获得的字符串
FIELD1?FIELD2?FIELD3?...
因此文件中使用的 §
与指定为分隔符的不同,它也无法打印出来。
那么这里有什么问题呢?也许原始文件应该使用 2 个字节来存储 §
?
最佳答案
§
的UTF-8编码为0xC2 0xA7
。
如果该文件使用A7
来表示§
,那么它可能写在ISO-8859-1 中。 (或另一个 ISO-8859-* 或其衍生物)。
关于Java解析UTF8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2586564/