在具体判断时,如果文档不带有BOM,就无法根据BOM做出判断,而且IsTextUnicode API也无法对UTF-8编码的Unicode字符串做出判断。那在编程判断时就要根据UTF-8字符编码的规律进行判断了。
UTF-8是一种多字节编码的字符集,表示一个Unicode字符时,它可以是1个至多个字节,在表示上有规律:
1字节:0xxxxxxx
2字节:110xxxxx 10xxxxxx
3字节:1110xxxx 10xxxxxx 10xxxxxx
4字节:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
这样就可以根据上面的特征对字符串进行遍历来判断一个字符串是不是UTF-8编码了。
举例代码:
java.io.File f=new java.io.File("待判定的文本文件名")
try{
java.io.InputStream ios=new java.io.FileInputStream(f)
byte[] b=new byte[3]
ios.read(b)
ios.close()
if(b[0]==-17&&b[1]==-69&&b[2]==-65)
System.out.println(f.getName()+"编码为UTF-8")
else System.out.println(f.getName()+"可能是GBK")
}catch(Exception e){
e.printStackTrace()
}
你是要判断字符还是判断文件的编码,若是字符:String
str="123456"
String
type
=
"utf-8"
//更换这里进行其他编码判断
try
{
if
(str.equals(new
String(str.getBytes(type
),
type
)))
{
return
type
}
}
catch
(Exception
e)
{
}
如果是文件,麻烦一些,可以使用一个开源项目cpdetector,这个我也没用过,你自己查一下吧
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)