有没有办法确定给定的字符集(java.nio.charset.Charset)是否使用多个字节对字符进行编码?或者,是否有某个字符集的列表,每个字符使用/不使用超过一个字节?
我问的原因是性能调整:我需要知道任意字符串在给定字符集中的长度(以字节为单位)。在单字节编码的情况下,它只是字符串的长度。了解字符集是否为单字节将使我不必先重新编码。
您可能认为这是一个微不足道的优化,可能不值得付出努力,但我的应用程序中的大量 CPU 周期都花在了这种无意义的事情上,到目前为止我遇到的输入数据有使用了 20 多种不同的字符集。
最佳答案
最简单的方法大概是:
boolean multiByte = charset.newEncoder().maxBytesPerChar() > 1.0f;
请注意,如果 Charset
不支持编码,newEncoder
可能会抛出 UnsupportedOperationException
。虽然没有记录 newDecoder
来抛出它,但 maxCharsPerByte
是不合适的。您可以使用 averageCharsPerByte
- 如果它是 1 那么它很好地表明它是单字节编码,但理论上您可以有一些字节产生多个字符,并且有些每个字符占用多个字节,平均为 1...
关于java - 确定字符集是否为多字节的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16627232/