恩,又碰到个蛋疼的编码转换问题了:要把形如 \xE9\xBB 的字符串转成中文。。。
在python中我们直接 print "\xE9\xBB\x84" 即可,
在shell中我们直接 echo $'\xe9\xbb\x84' #echo -e '\xe9\xbb\x84'也行,
注意:不能直接 echo $'\xde\xab'|iconv -f gbk -t utf-8 ,
因为 gbk的话,\xE9\xBB是榛,后面的\x84只有半个字,会报错或乱码,
utf8是变长的,占1~4字节,汉字一般是3字节,例如 xe9是16进制,占8bit,也就是一个字节。
但是到了 java 中,就比较蛋疼了,还是上代码吧:
01 | import java.io.UnsupportedEncodingException; |
03 | public class Hex2Byte { |
04 | public static void main(String[] args) throws UnsupportedEncodingException { |
06 | String source = "\\xE9\\xBB\\x84\\xE8\\x8A\\xB1\\xE6\\xA2\\xA8\\xE5\\xAE\\xB6\\xE5\\x85\\xB7\\xE8\\xBD\\xAC\\xE8\\xAE\\xA9" ; |
07 | String sourceArr[] = source.split( "\\\\" ); |
08 | byte [] byteArr = new byte [sourceArr.length - 1 ]; |
09 | for ( int i = 1 ; i < sourceArr.length; i++) { |
10 | Integer hexInt = Integer.decode( "0" + sourceArr[i]); |
11 | byteArr[i - 1 ] = hexInt.byteValue(); |
14 | System.out.println( new String(byteArr, "UTF-8" )); |
下面再来看看 unicode 形式怎么在 java 中转换:
1 | String string = "中国\u6211\u7231\u5317\u4EAC" ; |
2 | byte [] utf8 = string.getBytes( "UTF-8" ); |
3 | string = new String(utf8, "UTF-8" ); |
4 | System.out.println(string); |
恩,最后,我想说的是:java 是最好的语言!
REF:
java中byte 与16进制字符相互转换
http://marshzg.iteye.com/blog/722260
shell 下 urlencode/urldecode 编码/解码的几种方法
http://hi.baidu.com/leejun_2005/item/9e0f4e4ba62cde0bc11613b5
java: utf-8 与 unicode 互转
http://www.360doc.com/content/08/0421/16/21290_1206154.shtml
推荐阅读:
深度剖析Java的字符编码
http://geeklu.com/2009/12/dive-into-the-charset-of-java/