检测无状态字符集

3
在Java中,是否有一种方法可以检测所有可用字符集(Charset#availableCharsets())的无状态字符集?无状态意味着给定的字符集不使用移位状态来表示多个编码字符集,根据this description(参见3.2无状态和有状态)。我需要这些信息,因为我正在开发一个工具,该工具可以在随机位置解码二进制流,而这在使用有状态字符集时是不可能的。 编辑:我注意到,在搜索有状态编码时,只出现ISO-2022。这些是唯一可用的有状态编码吗?如果是这种情况,问题可能通过按名称区分编码的状态(即所有“ISO-2022”均为有状态/其他所有编码均不是)来解决。
1个回答

0

似乎没有办法知道Charset是否具有状态。

除了ISO-2022之外,还有一些具有状态的字符集,例如:

Java SE Supported Encodings 中的字符集中,EUC(EUC-JPEUC-KR等)明确地具有状态。它使用单个转换来表示其状态。例如,当您在流中指向ASCII字节时,必须查看先前的字节,因为ASCII字节可以出现作为尾随字节。有关详细信息,请参见https://en.wikipedia.org/wiki/Extended_Unix_Code
除了EUC之外,Shift_JISWindows-31j隐含地具有状态。例如,在Shift_JIS中,0x83 0x84表示0x84 0x83表示с。因此,当您获得像... 0x83 0x84 0x83 0x84 0x83 0x84 0x83 ...这样的字节数组时,您必须回溯到数组的开头以确定该数组是表示ヤヤヤヤヤ...还是ссссс...
在Java SE支持的编码之外,一些用于日本大型机的字符集(JIPS、KEIS等)具有状态。如果您的JDK支持此类字符集,则必须对它们进行处理。有关详细信息,请参见https://ja.wikipedia.org/wiki/%E6%BC%A2%E5%AD%97%E3%82%B7%E3%83%95%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89(日语)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接