确定字符集是否为多字节的方法?

时间:2013-05-18 17:47:28

标签: java character-encoding

有没有办法确定给定的Charset(java.nio.charset.Charset)是否使用多个字节对字符进行编码?或者,是否有一个字符集的某个列表,每个字符使用/不使用多个字节?

我问的原因是性能调整:我需要知道给定字符集中任意字符串的长度(以字节为单位)。在单字节编码的情况下,它只是字符串的长度。知道字符集是否是单字节将使我不必首先重新编码它。

你可能认为这是一个微不足道的优化,不值得付出努力,但我的应用程序中的很多CPU周期花在这种废话上,而我到目前为止遇到的输入数据有在20多个不同的字符集中。

1 个答案:

答案 0 :(得分:4)

最简单的方法可能是:

boolean multiByte = charset.newEncoder().maxBytesPerChar() > 1.0f;

请注意,如果newEncoder不支持编码,UnsupportedOperationException可以抛出Charset。虽然没有记录newDecoder,但maxCharsPerByte不合适。你可以使用averageCharsPerByte - 如果那是1,那么它是一个非常好的迹象表明它是单字节编码,但理论上 你可能有一些产生多个字符的字节,还有一些需要每个字符多个字节,平均值为1 ...