检查字符串是否包含Java中非UTF-8编码的字符

时间:2019-08-08 10:16:05

标签: java utf-8

在提出任何要求之前,我已经签出了:
Determine if characters in a string are all of a specific character set

...并尝试了选定的答案(使用UTF-8):
StandardCharsets.UTF_8.newEncoder().canEncode(input);

输入的是字符串?

  

我也尝试了CharsetDecoder,但没有任何有价值的结果(总是被确认为有效)

1 个答案:

答案 0 :(得分:2)

Java String采用UTF-16格式:

  

字符串代表 UTF-16格式的字符串,其中补充字符由代理对表示(有关更多信息,请参见Character类中的Unicode字符表示部分)。索引值指的是字符代码单位,因此补充字符在String中使用两个位置。

UTF-16 is

  

UTF-16(16位Unicode转换格式)是一种字符编码,能够编码Unicode的所有1,112,064个有效代码点

UTF-8 is

  

UTF-8是可变宽度的字符编码,能够使用一到四个8位字节对Unicode中的所有1,112,064个有效代码点进行编码

因此,可以在Java String中出现的每个字符都可以用UTF-8进行编码。

因此

StandardCharsets.UTF_8.newEncoder().canEncode(input);

应始终返回true。