Java中是否有办法检测所有可用字符集的无状态字符集(Charset#availableCharsets()
)?
无状态意味着根据this description(见无状态和有状态),给定的字符集不会对多个编码字符集使用移位状态。
我需要这些信息,因为我目前正在开发一种工具,它可以在随机位置解码二进制流,而使用有状态字符集是不可能的。
编辑:我注意到,在Google搜索有状态编码时,只显示ISO-2022。这些是唯一可用的有状态编码吗? 在这种情况下,可以通过区分编码来解决问题。名称的状态(即所有" ISO-2022" s是有状态的/所有其他的都没有)。
答案 0 :(得分:0)
似乎没有办法知道Charset
是否有状态。
除了ISO-2022,还有一些有状态字符集,例如:
EUC-JP
,EUC-KR
等)具有明确的状态。它使用单班制来表达其状态。因此,例如,当您在流中指向ASCII字节时,您必须看到一个前一个字节,因为ASCII字节可以显示为尾随字节。有关详细信息,请参见https://en.wikipedia.org/wiki/Extended_Unix_Code。Shift_JIS
和Windows-31j
隐含状态。例如,0x83 0x84
中的ヤ
表示0x84 0x83
,而с
表示Shift_JIS
。因此,当您获得... 0x83 0x84 0x83 0x84 0x83 0x84 0x83 ...
之类的字节数组时,必须回溯到数组的开头,以确定该数组是指ヤヤヤヤヤ...
还是ссссс...
。