「java怎么检查文本编码」java编码格式
本篇文章给大家谈谈java怎么检查文本编码,以及java编码格式对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
java如何判断编码是否是utf8编码
UTF-8编码规范 及如何判断文本是UTF-8编码的
UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
根据以上说明 下面给出一段java代码判断UTF-8格式
/**
* UTF-8编码格式判断
*
* @param rawtext
* 需要分析的数据
* @return 是否为UTF-8编码格式
*/
public static boolean isUTF8(byte[] rawtext) {
int score = 0;
int i, rawtextlen = 0;
int goodbytes = 0, asciibytes = 0;
// Maybe also use UTF8 Byte Order Mark: EF BB BF
// Check to see if characters fit into acceptable ranges
rawtextlen = rawtext.length;
for (i = 0; i rawtextlen; i++) {
if ((rawtext[i] (byte) 0x7F) == rawtext[i]) {
// 最高位是0的ASCII字符
asciibytes++;
// Ignore ASCII, can throw off count
} else if (-64 = rawtext[i] rawtext[i] = -33
//-0x40~-0x21
// Two bytes
i + 1 rawtextlen -128 = rawtext[i + 1]
rawtext[i + 1] = -65) {
goodbytes += 2;
i++;
} else if (-32 = rawtext[i]
rawtext[i] = -17
// Three bytes
i + 2 rawtextlen -128 = rawtext[i + 1]
rawtext[i + 1] = -65 -128 = rawtext[i + 2]
rawtext[i + 2] = -65) {
goodbytes += 3;
i += 2;
}
}
if (asciibytes == rawtextlen) {
return false;
}
score = 100 * goodbytes / (rawtextlen - asciibytes);
// If not above 98, reduce to zero to prevent coincidental matches
// Allows for some (few) bad formed sequences
if (score 98) {
return true;
} else if (score 95 goodbytes 30) {
return true;
} else {
return false;
}
另外对于正规的文本文件来说UTF-8的文件开头有3个字节来标识该文本是UTF-8编码
EF, BB, BF三个字节
但通常不采用以下这种方案 因为许多文件不标准
public static boolean getByteEncode(byte[] b)
{
if(b != null b.length3)
{
byte utf8[] = {(byte) 0xEF, (byte) 0xBB, (byte) 0xBF};
if((b[0] == utf8[0])(b[1]==utf8[1])(b[2]==utf8[2]))
return true;
}
return false;
}
java判断文件编码格式 怎么判断编码格式
UTF-8编码的文本文档,有的带有BOM (Byte Order Mark, 字节序标志),即0xEF, 0xBB, 0xBF,有的没有。Windows下的txt文本编辑器在保存UTF-8格式的文本文档时会自动添加BOM到文件头。在判断这类文档时,可以根据文档的前3个字节来进行判断。然而BOM不是必需的,而且也不是推荐的。对不希望UTF-8文档带有BOM的程序会带来兼容性问题,例如Java编译器在编译带有BOM的UTF-8源文件时就会出错。而且BOM去掉了UTF-8一个期望的特性,即是在文本全部是ASCII字符时UTF-8是和ASCII一致的,即UTF-8向下兼容ASCII。
在具体判断时,如果文档不带有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]==-17b[1]==-69b[2]==-65)
System.out.println(f.getName()+"编码为UTF-8");
else System.out.println(f.getName()+"可能是GBK");
}catch(Exception e){
e.printStackTrace();
}
java 怎么判断编码是utf-8 还是gbk
你是要判断字符还是判断文件的编码,若是字符:
String str="123456";
String type = "utf-8"; //更换这里进行其他编码判断
try {
if (str.equals(new String(str.getBytes(type ), type ))) {
return type;
}
} catch (Exception e) {
}
如果是文件,麻烦一些,可以使用一个开源项目cpdetector,这个我也没用过,你自己查一下吧
java怎么检查文本编码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java编码格式、java怎么检查文本编码的信息别忘了在本站进行查找喔。