一个比较偏僻的问题:如果字符串的内容是一种编码格式:String str = "GBK"; 或 String str = "utf-8"; 则返回true,如果字符串的内容不是编码格式(如String str = "srtergerg"; )则返回false
一个比较偏僻的问题:如果字符串的内容是一种编码格式:String str = "GBK"; 或 String str = "utf-8"; 则返回true,如果字符串的内容不是编码格式(如String str = "srtergerg"; )则返回false
http://simlee.javaeye.com/blog/431611
至于出现的乱码,是由于本身不是utf8的,但是java按照utf8来进行解释。如果要判断“字符串的编码”,那么就不能够使用String。而应该使用它的byte[]表示形式
不同的编码字节的最高位是不一样的,具体的话可以查看编码的文档P.S.
以上是个人理解~
举例来说,所有的编码方式都和ascii兼容,也就是说如果这个“字符串”的所有字符都是ascii字符,那么就无法确定是哪一个编码了大概是这样吧~~
对于任何存储在虚拟机内存中的String类型的字符串,其编码格式是一种utf-8编码的变种,这种变种其实不是utf-8的编码格式,它是虚拟机字符串的内部编码。对于任何传入的所谓utf-8编码的字符串数据以及gbk字符串数据,都会转化成那种内部编码。
如果你看到有这种语句new String(b,"gbk");,它所要表达的意思并不是说要生成一个字符编码为gbk的String的字符串,他所要表达的意思,其实是用gbk的编码模式去解析b这个字节数组(即数据),然后将解析结果变成虚拟机所认识的虚拟机内部字符串编码。
而对于String.getByte("gbk")这个方法的意思,也并不是说获得一个gbk方式编码的字符串的byte数组数据,而是通过gbk的编码方式,将虚拟机的内部编码转换成gbk编码的byte数组数据,而String.getByte()是根据操作系统默认编码进行转码的方式,例如在windows操作系统下,其实这个等价于String.getByte("gbk")。
要注意的是,虚拟机只认识utf-8变种的内部编码,对于其它编码方式它其实都不认识,不能被虚拟机自身解析。
这里特别说明一下,其实utf-8的变种编码是sun的jdk实现,也许其它公司的jdk实现不是这种编码。
public static boolean isCharSet(String charSet) {
try {
"test".getBytes(charSet);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
return false;
}
return true;
}
这个问题这样做应该可以
Map<String, Charset> charsets = Charset.availableCharsets();
for (Map.Entry<String, Charset> entry : charsets.entrySet()) {
if (entry.getKey().equals(charset)) {
return true;
}
}
return false;
}的确没多少人看清楚了楼主想要问什么,Java里面的java.nio.charset.Charset类可以穷举当前系统中所有可用的编码,目前好像只能用穷举了,希望对楼主有帮助。
Character ch = new Character(c);
String sCh = ch.toString();
try {
byte[] bb = sCh.getBytes("gb2312");
if (bb.length > 1) {
return true;
}
} catch (java.io.UnsupportedEncodingException ex) {
return false;
}
return false;
}
用这种方式吧!你写一个xml配置文档,方便拓展(因为不晓得到底有多少种编码方式)!然后写一个类用IO读出来!然后用判断此字符串是否在读出来的字符串中!
import java.nio.charset.Charset;public class CharsetTest {
public static void main(String[] args) {
System.out.println(Charset.isSupported("GBK"));
System.out.println(Charset.isSupported("utf-8"));
System.out.println(Charset.isSupported("iso-8859-1"));
System.out.println(Charset.isSupported("hello"));
System.out.println(Charset.isSupported("gbK"));
System.out.println(Charset.isSupported("gbk"));
System.out.println(Charset.isSupported("GB18030"));
}
}
String code = "GBK";
String faultCode = "GBA";
System.out.println(code + " is a " + isCharset(code) + " charset");
System.out.println(faultCode + " is a "+ isCharset(faultCode) + " charset");
}
public static boolean isCharset(String code){
try {
"".getBytes(code);
return true;
} catch (UnsupportedEncodingException e) {
return false;
}
}