有没有办法确定给定的Charset(java.nio.charset.Charset)是否使用多个字节对字符进行编码?或者,是否有一个字符集的某个列表,每个字符使用/不使用多个字节?
我问的原因是性能调整:我需要知道给定字符集中任意字符串的长度(以字节为单位)。在单字节编码的情况下,它只是字符串的长度。知道字符集是否是单字节将使我不必首先重新编码它。
你可能认为这是一个微不足道的优化,不值得付出努力,但我的应用程序中的很多CPU周期花在这种废话上,而我到目前为止遇到的输入数据有在20多个不同的字符集中。
答案 0 :(得分:4)
最简单的方法可能是:
boolean multiByte = charset.newEncoder().maxBytesPerChar() > 1.0f;
请注意,如果newEncoder
不支持编码,UnsupportedOperationException
可以抛出Charset
。虽然没有记录newDecoder
,但maxCharsPerByte
不合适。你可以使用averageCharsPerByte
- 如果那是1,那么它是一个非常好的迹象表明它是单字节编码,但理论上 你可能有一些产生多个字符的字节,还有一些需要每个字符多个字节,平均值为1 ...