怎样判断字符串的编码是UTF8还是UTF16?采用如下方式区别不出来
if (str.equals(new String(str.getBytes("UTF8"), "UTF8")))
...
还望大虾指点。。
谢谢
if (str.equals(new String(str.getBytes("UTF8"), "UTF8")))
...
还望大虾指点。。
谢谢
解决方案 »
- 请教一个多线程的问题
- 求 thinkiing in java 第四版的答案飞!!
- socket里如何完整读取指定长度的字节流?
- JBuilder6.0的个人版或企业版哪能下的啊(带key),找了一晚了— —
- 如何判断输入的是一个数字(比如:float类型)而不是有数字外的数据?
- 请问如何将整个文件内容读到一个字符串中去?
- 关于一段Java计数器代码(applet)的问题:
- 大家说一点关于用JAVA做底层的东西的例子?(网络,操作系统)先送100分,只要说的是对的就给100分,不够的再发贴补上
- 急问html中parser 的用法
- 有谁能告诉我在JAVA中怎么关闭别的程序(用EXEC方法调用VB的程序,但我不知道怎么在JAVA中把它关闭),谢谢帮助
- JPanel显示图片问题
- 使用jwordnet时遇到的一个错误
str = new String("你好".getBytes("utf-8"))
结果str是乱码,因为中文windows下字符串是gbk码, java把utf-8编码的字节当成gbk来解释。就是说,如果你想判断字符串是什么编码,可以说只有一种gbk (jdk 1.6 + 中文windows 环境下,不同操作系统可能不同).另外上例中 str.getBytes() 得出的字节数组是 -28, -67, -96, -27, -91, -67 , 如果你问这个字节数组是什么编码,实际上是不确定的, 当然java会认为它是gbk,所以str出来是乱码.
补充说明一下:
函数原型如下
public static String getString(byte[] baBuf, int iBegin, int iLength)
{这里 baBuf 是byte的数组,从证书文件中取得,(内容为某人的姓名)问题是,如何判断这个baBuf里面的内容是UTF8还是UTF16编码,看到网上有篇帖子 使用下面这种方式 可以区分出ISO-8859-1、GBK、UTF8编码
String str = new String(baBuf, iBegin, iLength);
if (str.equals(new String(str.getBytes("UTF8"), "UTF8")))
...试验了,可是当baBuf中的是采用UTF16编码,这种方法 就不能区别 是UTF8还是UTF16编码还忘高人指点
就这句代码来看,是不能判断字节流是否是UTF8的呀, 就是说无论baBuf实际上是什么编码,你这句代码都会返回true,起不了判断的作用.
另外, 根据你说的情况,应该是不能确定传进来的baBuf数组是何种编码的,我们遇到这种情况的时候,一般需要发送方同时发送编码信息过来. 如果没有这个信息是不能知道字节数组的编码的. 当然各种编码有一定规则,如果有大量数据,通过复杂的算法是可以估计出字节数组是何种编码.
如果只得几个字节的字节数组是无法确定编码的。如果对方是按标准来办事,发过来的字节数组会带上编码信息的,可能是头几个字节,又或者通过其它参数传过来.
可是测不出是UTF8还是UTF16if (str.equals(new String(str.getBytes("UTF8"), "UTF8"))
...
if (str.equals(new String(str.getBytes("UTF16"), "UTF16"))
...
这两个if都会返回true
public static boolean isUTF_8(byte[] file){
if(file.length<3)
return false;
if((file[0]&0xFF)==0xEF &&
(file[1]&0xFF)==0xBB &&
(file[2]&0xFF)==0xBF)
return true;
return false;
}LZ判断是否为UTF-8就可以了
如果根据字符串本身能判断出编码只能说是一派胡言。
如果根据字符串本身能判断出编码只能说是一派胡言。
根据自身判断,是参考这边日志中的方法
跟楼主用的方法差不多了,但据我的了解
str.equals(new String(str.getBytes(encode), encode))
这行代码总会返回true, 无论str这个参数是什么,这个函数总会返回gb2312. 我不知道楼主是如何测试的。 但我的测试过,总是返回gb2312,正符合我的理论.
希望有高手发表意见./**
* 判断字符串的编码
*
* @param str
* @return
*/
public static String getEncoding(String str) {
String encode = "GB2312";
try {
if (str.equals(new String(str.getBytes(encode), encode))) {
String s = encode;
return s;
}
} catch (Exception exception) {
}
encode = "ISO-8859-1";
try {
if (str.equals(new String(str.getBytes(encode), encode))) {
String s1 = encode;
return s1;
}
} catch (Exception exception1) {
}
encode = "UTF-8";
try {
if (str.equals(new String(str.getBytes(encode), encode))) {
String s2 = encode;
return s2;
}
} catch (Exception exception2) {
}
encode = "GBK";
try {
if (str.equals(new String(str.getBytes(encode), encode))) {
String s3 = encode;
return s3;
}
} catch (Exception exception3) {
}
return "";
}
}