读书人

JAVA Unicode 编码跟汉字的相互转换

发布时间: 2012-12-20 09:53:21 作者: rapoo

JAVA Unicode 编码和汉字的相互转换

import java.util.regex.Matcher;??
import java.util.regex.Pattern;

/**
?* 时间:2009-8-25
?*
?* 作者:*/


public class T10_BianMa {

??? /**
???? * java unicode 的相互转换
???? */
??? public T10_BianMa() {
??? }

??? public static void main(String[] args){
???????
?????? System.out.println(UnicodeToString("\u901F\u5EA6\u4E2D\u56FD"));
???????
?????? String chinese = "中华人民共和国";?
?????? for(int i = 0;i<chinese.length();i++){
?????????? System.out.print("\\u " + Integer.toHexString(chinese.charAt(i)));
?????????? //System.out.print(chinese.getBytes("Unicode")[i]);
??????????
?????? }
?????? System.out.println();
??????
???????????
?????? String str = "\u4e2d\u534e\u4eba\u6c11\u5171\u548c\u56fd";????
?????????
?????? for(int j = 0;j<str.length();j++) {
?????????? System.out.println(str.charAt(j));
?????? }
??? }

??? public static String UnicodeToString(String str) {
??????? Pattern pattern = Pattern.compile("(\\\\u(\\p{XDigit}{4 }))");???
??????? Matcher matcher = pattern.matcher(str);
??????? char ch;
??????? while (matcher.find()) {
??????????? ch = (char) Integer.parseInt(matcher.group(2), 16);
??????????? str = str.replace(matcher.group(1), ch + "");???
??????? }
??????? return str;
??? }


/**

将JDK的bin目录加入系统变量path。在盘下建立一个test目录,在test目录里建立一个zh.txt文件,
文件内容为:“熔岩”,打开“命令行提示符”,并进入C:\test目录下。下面就可以按照说明一步一步来操作,注意观察其中编码的变化。

A:将zh.txt转换为Unicode编码,输出文件到u.txt
native2ascii zh.txt u.txt
打开u.txt,内容为“\u7194\u5ca9”。
B:将zh.txt转换为Unicode编码,输出到控制台 --Unicode输出文件
C:\test>native2ascii zh.txt???????
\u7194\u5ca9
可以看到,控制台输出了“\u7194\u5ca9”。
C:将zh.txt转换为ISO8859-1编码,输出文件到i.txt
native2ascii -encoding ISO8859-1 zh.txt i.txt
打开i.txt文件,内容为“\u00c8\u00db\u00d1\u00d2”。
D:将u.txt转换为本地编码,输出到文件u_nv.txt? --输出文件
native2ascii -reverse u.txt u_nv.txt
打开u_nv.txt文件,内容为“熔岩”。
E:将u.txt转换为本地编码,输出到控制台
C:\test>native2ascii -reverse u.txt
熔岩
可以看到,控制台输出了“熔岩”。
F:将i.txt转换为本地编码,输出到i_nv.txt??
native2ascii -reverse i.txt i_nv.txt
打开i_nv.txt文件,内容为“\u00c8\u00db\u00d1\u00d2”。发现转码前后完全一样的。也就是说,等于没有转,或者说思想糊涂,对命名没有理解。。

G:将i.txt转换为GBK编码,输出到i_gbk.txt
native2ascii -reverse -encoding GBK i.txt i_gbk.txt
打开i_gbk.txt文件,内容为“\u00c8\u00db\u00d1\u00d2”。发现转码前后完全一样的。也就是说,等于没有转,或者说思想糊涂,对命名没有理解。

H:将u_nv.txt转码到本地编码GBK,输出到控制台
C:\test>native2ascii -reverse -encoding ISO8859-1 i.txt?????????
熔岩
从这个结果看,目标达到到了,编码i.txt为ISO8859-1,转为本地编码后内容为“熔岩”。
从这里应该意识到,native2ascii -reverse命令中-encoding指定的编码为源文件的编码格式。
而在native2ascii 命令中-encoding指定的编码为(生成的)目标文件的编码格式。这一点非常的重要!切记!!

继续探索,新建文件12a.txt,内容“12axyz”。看看纯字母数字的编码又如何。

I:将纯字母数字的文本文件12a.txt转换为Unicode编码
native2ascii 12a.txt 12a_nv.txt
打开12a_nv.txt文件,内容为“12axyz”。
继续测试,转为ISO8859-1编码看看
C:\test>native2ascii -encoding ISO8859-1 12a.txt
12axyz
结果还是没有转码。

*/
???
}

?//========================================================================

?private static final char[] hexDigit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; ??? ??? private static char toHex(int nibble) { return hexDigit[(nibble & 0xF)]; } 

?

?

?

读书人网 >编程

热点推荐