检查String是否在Java中是有效的UTF-8编码

Mic*_*vin 37 java encoding utf-8

如何检查字符串是否为有效的UTF-8格式?

DAr*_*rkO 34

只能检查字节数据.如果你构造了一个String,那么它内部已经是UTF-16了.

只有字节数组可以是UTF-8编码的.

以下是UTF-8转换的常见情况.

String myString = "\u0048\u0065\u006C\u006C\u006F World";
System.out.println(myString);
byte[] myBytes = null;

try 
{
    myBytes = myString.getBytes("UTF-8");
} 
catch (UnsupportedEncodingException e)
{
    e.printStackTrace();
    System.exit(-1);
}

for (int i=0; i < myBytes.length; i++) {
    System.out.println(myBytes[i]);
}
Run Code Online (Sandbox Code Playgroud)

如果您不知道字节数组的编码,juniversalchardet是一个帮助您检测它的库.

  • 正如澄清一样,严格来说,String的实例不是UTF-16编码形式,因为它允许不正确的代码单元序列(以隔离的代理代码单元的形式).但是,它是一个Unicode 16位字符串. (4认同)
  • 更严格地说,Java String也不是真正的Unicode 16位字符串,因为它可以包含[代理](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk /6-b14/sun/nio/cs/Sur​​rogate.java)用于UCS4(3字节和4字节)字符. (4认同)