Java 则采用了平台无关的 UNICODE,Java 从一个 byte 流中读取一个字符串时,将把平台 相关的 byte 转变为平台无关的 Unicode 字符串。在输出时 Java 将把 Unicode 字符串转变为平台相关的 byte 流,如果某个 Unicode 字 符在某个平台上不存在,将会输出一个 ‘?’ 。
GB2312 编码中一个汉字是 16 位的,而 UTF8 中一个汉字却是 24 位的。如果实现 UTF-8 与 gb2312 编码的相互转换呢?今天整理了一番,给出两者进行转换的代码。
// 将 UTF-8 编码的字符串转换为 GB2312 编码格式:
public static String utf8Togb2312(String str){
StringBuffer sb = new StringBuffer();
for ( int i=0; i<str.length(); i++) {
char c = str.charAt(i);
switch (c) {
case ‘+’ :
sb.append( ’ ‘ );
break ;
case ‘%’ :
try {
sb.append(( char )Integer.parseInt (
str.substring(i+1,i+3),16));
}
catch (NumberFormatException e) {
throw new IllegalArgumentException();
}
i += 2;
break ;
default :
sb.append(c);
break ;
}
}
String result = sb.toString();
String res= null ;
try {
byte [] inputBytes = result.getBytes( “8859_1” );
res= new String(inputBytes, “UTF-8” );
}
catch (Exception e){}
return res;
}
// 将 GB2312 编码格式的字符串转换为 UTF-8 格式的字符串:
public static String gb2312ToUtf8(String str) {
String urlEncode = “” ;
try {
urlEncode = URLEncoder.encode (str, “UTF-8” );
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return urlEncode;
}
当然各种编码之前都可以进行相互的转换,本文只是将最常用的两种字符进行了转换,起到抛砖引玉的作用。后期如果有额外的需求,再对其它字符的转换进行介绍。