java如何判断编码是否是utf8编码

供稿:hz-xin.com     日期:2024-05-16
java怎么判断byte的原字符串的编码

判定是否是UTF-8编码格式的代码片段如下:
[java] view plaincopy
File file = new File(path);
InputStream in= new java.io.FileInputStream(file);
byte[] b = new byte[3];
in.read(b);
in.close();
if (b[0] == -17 && b[1] == -69 && b[2] == -65)
System.out.println(file.getName() + ":编码为UTF-8");
else
System.out.println(file.getName() + ":可能是GBK,也可能是其他编码");

因为系统是中文语言的,得到的是GBK编码,所以肯定不是utf的。
工具:
win7
jdk
方法:
在计算机上右键选择属性

点击高级系统设置

点击环境变量

在系统变量中点新建,输入变量名为: JAVA_TOOL_OPTIONS, 变量值为:-Dfile.encoding=UTF-8,确定就可以了。

UTF-8编码规范 及如何判断文本是UTF-8编码的
UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前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.length>3)
   {
    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如何判断编码是否是utf8编码
答:UTF-8编码规范 及如何判断文本是UTF-8编码的UTF-8的编码规则很简单,只有二条:1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前...

java判断文件编码格式 怎么判断编码格式
答: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....

文本编码是什么意思,怎么看自己的java,是UTF-8还是 UTF-16的?
答:文本编码就是用什么样的编码对你的代码进行编码,假如你用的记事本,当你保存时你可以看到下面可以选择编码,假如你选择了UTF-8,这时就用UTF-8对你的代码进行编码,下次当你用gbk或者其他的编码进行打开(解码)时就会出现乱码,在eclipse或者myeclipse中,可以再工程上右键,选择Properties,然后可以看到第...

判断文件编码是否为UTF
答:当文件使用了utf-8编码的时候,默认编码ansi,跟fis判定结果utf-8不一致,fis采用uft-8编码读取出文件内容,而后,br.readline采用系统默认编码把UTF-8编码对应的byte[]组合成了ansi编码对应的字符串,就产生了乱码。我在网络以及java api里面查找了一下,没有找到判定文件保存编码的方法。推论:因为java...

〈java〉怎么精确判断读取的任意文本的编码格式?utf-i8, unicode,ansi...
答:new String(a.getBytes("ISO-8859-1"),"GB2312")以单字节编码方式获取字符串流, 然后转中文格式,或者 new String(a.getBytes("ISO-8859-1"),"UTF-8")GBK是中国的解析字符标准,UTF-8是世界标准

java 判断字符串什么编码类型
答:用常见的编码方式对字节流进行解码,比如Unicode,UTF8, UTF8 without BOM, UTF16, ANSI等等。对解析的结果进行判断,是不是一个合理的可打印字符,可打印字符最多的解码方式就是最可能的编码了。如何判断可打印字符?流程如下:把解析好的字符串按照字符进行遍历,把每一个字符转化成Unicode编码,看看...

java 判断字符串什么编码类型
答:用常见的编码方式对字节流进行解码,比如Unicode,UTF8,UTF8 without BOM,UTF16,ANSI等等。对解析的结果进行判断,是不是一个合理的可打印字符,可打印字符最多的解码方式就是最可能的编码了。如何判断可打印字符?流程如下:把解析好的字符串按照字符进行遍历,把每一个字符转化成Unicode编码,看看这些...

Java中如何查看字符串是什么字符集
答:如:new String("tested str".getBytes("enc"),"enc")2、大多数时候,我们只要判断本地平台编码和utf8,utf8编码相当有规律,所以可以分析是否是utf8,否则使用本地编码。原理:分析byte[]来判断规律。缺点:有时,个别本地编码字节在utf8中也会出现,导致出错,需要分析。如:判断是否utf-8代码:public ...

Java如何判断一个字符串是否为乱码
答:就出现了乱码。2.严格来讲java只能判断简单的乱码 例如:用正则表达式判断一行字符串是否有字母,数字,等等吧 但是不准确。乱码一般情况下是没有字母或者数字的。但是java没法准确的判断字符串是否为乱码。解决办法就是自己定义一种编码(比如utf-8),只要不是此编码的都认定为乱码。

Java判断字符串是否是乱码
答:java.nio.charset.Charset.forName("GBK").newEncoder().canEncode("测试") //判断是不是GBK编码 即是否乱码 //使用request.getQueryString()获取通过URL传过来的值 有可能是乱码 如:q=éæ¥String s = request.getQueryString();if(s!=null){ if(!(java.nio.charset.Charset.forName...