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

标签 java character-encoding

有没有办法确定给定的字符集(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/

相关文章:

java.lang.NoSuchMethodError : io.netty.channel.DefaultChannelId.newInstance()Lio/netty/channel/DefaultChannelId;

java - Eclipse Java项目错误: cannot resolve declaration in swing

Python - Unicode 解码/编码

.NET 内部编码

MySQL 排序规则问题

Java 在自定义位置拆分字符串

java - java读取文件头

java - 行尾未读取 - Stream Tokenize Java

mysql - MySQL创建表中CHARSET的问题

java - UTF-8 和 UTF-16 之间有很大的区别吗