❶ java處理unicode字元
unicode編碼簡而言之就是將每一個字元用16位2進制數標識。但是通常都用4位的16進制數標識。
例如:
1)中文字元串"你好"的unicode碼為:\u60\u597d;
2)英文字元串"ab"的unicode碼為:\u0061\u0062;
其中\u是標識unicode碼用的,後面的4位16進制數則是對應字元的unicode碼。
unicode碼在J2EE項目中應用廣泛,java對unicode碼提供了很好的支持。例如國際化,則是unicode的經典運用。
那麼unicode的編碼規則具體是什麼,如何用程序實現?
1、unicode編碼規則
unicode碼對每一個字元用4位16進制數表示。具體規則是:將一個字元(char)的高8位與低8位分別取出,轉化為16進制數,
如果轉化的16進制數的長度不足2位,則在其後補0,然後將高、低8位轉成的16進制字元串拼接起來並在前面補上"\u" 即可。
2、轉碼程序
1)字元串轉unicode
/**
* 將字元串轉成unicode
* @param str 待轉字元串
* @return unicode字元串
*/
public String convert(String str)
{
str = (str == null ? "" : str);
String tmp;
StringBuffer sb = new StringBuffer(1000);
char c;
int i, j;
sb.setLength(0);
for (i = 0; i < str.length(); i++)
{
c = str.charAt(i);
sb.append("\\u");
j = (c >>>8); //取出高8位
tmp = Integer.toHexString(j);
if (tmp.length() == 1)
sb.append("0");
sb.append(tmp);
j = (c & 0xFF); //取出低8位
tmp = Integer.toHexString(j);
if (tmp.length() == 1)
sb.append("0");
sb.append(tmp);
}
return (new String(sb));
}
2)unicode轉成字元串,與上述過程反向操作即可
/**
* 將unicode 字元串
* @param str 待轉字元串
* @return 普通字元串
*/
public String revert(String str)
{
str = (str == null ? "" : str);
if (str.indexOf("\\u") == -1)//如果不是unicode碼則原樣返回
return str;
StringBuffer sb = new StringBuffer(1000);
for (int i = 0; i < str.length() - 6;)
{
String strTemp = str.substring(i, i + 6);
String value = strTemp.substring(2);
int c = 0;
for (int j = 0; j < value.length(); j++)
{
char tempChar = value.charAt(j);
int t = 0;
switch (tempChar)
{
case 'a':
t = 10;
break;
case 'b':
t = 11;
break;
case 'c':
t = 12;
break;
case 'd':
t = 13;
break;
case 'e':
t = 14;
break;
case 'f':
t = 15;
break;
default:
t = tempChar - 48;
break;
}
c += t * ((int) Math.pow(16, (value.length() - j - 1)));
}
sb.append((char) c);
i = i + 6;
}
return sb.toString();
}
❷ JAVA怎麼把unicode轉換成GBK ~然後我的JAVA代碼里出現了亂碼導致運行不了,你能幫我嗎
\u2605 ★
public static String utf8ToUnicode(String str) {
char[] myBuffer = str.toCharArray();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < str.length(); i++) {
UnicodeBlock ub = UnicodeBlock.of(myBuffer[i]);
if(ub == UnicodeBlock.BASIC_LATIN){
//英文及數字等
sb.append(myBuffer[i]);
}else if(ub == UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS){
//全形半形字元
int j = (int) myBuffer[i] - 65248;
sb.append((char)j);
}else{
//漢字
short s = (short) myBuffer[i];
String hexS = Integer.toHexString(s);
String unicode = "\\" + 'u' + hexS;
sb.append(unicode.toLowerCase());
}
}
return sb.toString();
}
❸ 我反編譯JAVA文件,有一些漢字信息就變成了\u9879 了
使用 jdk 自帶的 native2ascii.exe 工具,在你的 jdk文件夾/bin 下能找到。
針對你的問題,在 cmd 窗口中執行下面的命令即可(需要將 jdk文件夾/bin 加入到 path 環境變數中):
native2ascii -reverse C:\abc.java c:\abc2.java
(這里abc.java表示你的含有 \uxxxx 字元的java文件;
c:\abc2.java 表示轉後後的文件)
下面附上完整的 使用方法:
------------------------------
native2ascii用法解析
native2ascii是sun java sdk提供的一個工具。用來將別的文本類文件(比如
*.txt,*.ini,*.properties,*.java等等)編碼轉為Unicode編碼。為什麼要進行轉碼,
原因在於程序的國際化。
Java 編譯器和其它 Java 工具只能處理含有 Latin-1 和/或 Unicode 編碼(\udddd 記
號)字元的文件。native2ascii 將含有其它字元編碼的文件轉換成含 Latin-1 和/或
Unicode 編碼字元的文件。
若省略 outputfile,則使用標准輸出設備輸出。此外,如果也省略 inputfile,則使用
標准輸入設備輸入。
用法:native2ascii [-reverse] [-encoding 編碼] [輸入文件 [輸出文件]]
-[options]:表示命令開關,有兩個選項可供選擇
-reverse:
執行相反的操作:將含 Latin-1 和/或 Unicode 編碼字元的文件轉換成含本地編碼字元
的文件,不指定編碼情況下,將轉為本地編碼。
-encoding encoding_name
指定轉換過程使用的編碼名稱。預設的編碼從系統屬性 file.encoding 中得到。
encoding_name 字元串必須是下表第一欄所示的字元串。
[inputfile [outputfile]]
inputfile:表示輸入文件全名。
outputfile:輸出文件名。如果缺少此參數,將輸出到控制台
-------------------------------------------------------------
8859_1 ISO 8859-1
8859_2 ISO 8859-2
8859_3 ISO 8859-3
8859_4 ISO 8859-4
8859_5 ISO 8859-5
8859_6 ISO 8859-6
8859_7 ISO 8859-7
8859_8 ISO 8859-8
8859_9 ISO 8859-9
Big5 Big5 碼,繁體中文
CNS11643 CNS 11643,繁體中文
Cp037 美國、加拿大(兩種語言,法語)、荷蘭、葡萄牙、巴西、澳大利亞
Cp1006 IBM AIX 巴基斯坦(烏爾都語)
Cp1025 IBM 多語種西里爾語:保加利亞、波斯尼亞 黑塞哥維那、馬其頓 (FYR)
Cp1026 IBM Latin-5,土耳其
Cp1046 IBM Open Edition US EBCDIC
Cp1097 IBM 伊朗(波斯語)/波斯
Cp1098 IBM 伊朗(波斯語)/波斯 (PC)
Cp1112 IBM 拉脫維亞,立陶宛
Cp1122 IBM 愛沙尼亞
Cp1123 IBM 烏克蘭
Cp1124 IBM AIX 烏克蘭
Cp1125 IBM 烏克蘭 (PC)
Cp1250 Windows 東歐
Cp1251 Windows 斯拉夫語
Cp1252 Windows Latin-1
Cp1253 Windows 希臘
Cp1254 Windows 土耳其
Cp1255 Windows 希伯萊
Cp1256 Windows 阿拉伯
Cp1257 Windows 波羅的語
Cp1258 Windows 越南語
Cp1381 IBM OS/2, DOS 中華人民共和國 (PRC)
Cp1383 IBM AIX 中華人民共和國 (PRC)
Cp273 IBM 奧地利、德國
Cp277 IBM 丹麥、挪威
Cp278 IBM 芬蘭、瑞典
Cp280 IBM 義大利
Cp284 IBM 加泰羅尼亞語/西班牙、拉丁美洲西班牙語
Cp285 IBM 英國、愛爾蘭
Cp297 IBM 法國
Cp33722 IBM-eucJP - 日語 (5050 的超集)
Cp420 IBM 阿拉伯
Cp424 IBM 希伯萊
Cp437 MS-DOS 美國、澳大利亞、紐西蘭、南非
Cp500 EBCDIC 500V1
Cp737 PC 希臘
Cp775 PC 波羅的語
Cp838 IBM 泰國擴展 SBCS
Cp850 MS-DOS Latin-1
Cp852 MS-DOS Latin-2
Cp855 IBM 斯拉夫語
Cp857 IBM 土耳其語
Cp860 MS-DOS 葡萄牙語
Cp861 MS-DOS 冰島語
Cp862 PC 希伯萊
Cp863 MS-DOS 加拿大法語
Cp864 PC 阿拉伯語
Cp865 MS-DOS 日爾曼語
Cp866 MS-DOS 俄語
Cp868 MS-DOS 巴基斯坦語
Cp869 IBM 現代希臘語
Cp870 IBM 多語種 Latin-2
Cp871 IBM 冰島語
Cp874 IBM 泰國語
Cp875 IBM 希臘語
Cp918 IBM 巴基斯坦(烏爾都語)
Cp921 IBM 拉脫維亞、立陶宛(AIX, DOS)
Cp922 IBM 愛沙尼亞 (AIX, DOS)
Cp930 與 4370 UDC 混合的日語,5026 的超集
Cp933 與 1880 UDC 混合的韓文,5029 的超集
Cp935 與 1880 UDC 混合的簡體中文主機,5031 的超集
Cp937 與 6204 UDC 混合的繁體中文,5033 的超集
Cp939 與 4370 UDC 混合的日語拉丁字母,5035 的超集
Cp942 日語 (OS/2),932 的超集
Cp948 OS/2 中文(台灣),938 超集
Cp949 PC 韓文
Cp950 PC 中文(香港、台灣)
Cp964 AIX 中文(台灣)
Cp970 AIX 韓文
EUCJIS JIS, EUC 編碼、日語
GB2312 GB2312, EUC 編碼、簡體中文
GBK GBK, 簡體中文
ISO2022CN ISO 2022 CN, 中文
ISO2022CN_CNS ISO-2022-CN 形式的 CNS 11643,繁體中文
ISO2022CN_GB ISO-2022-CN 形式的 GB 2312,簡體中文
ISO2022KR ISO 2022 KR, 韓文
JIS JIS, 日語
JIS0208 JIS 0208, 日語
KOI8_R KOI8-R, 俄語
KSC5601 KS C 5601, 韓文
MS874 Windows 泰國語
MacArabic Macintosh 阿拉伯語
MacCentralEurope Macintosh Latin-2
MacCroatian Macintosh 克羅埃西亞語
MacCyrillic Macintosh 斯拉夫語
MacDingbat Macintosh Dingbat
MacGreek Macintosh 希臘語
MacHebrew Macintosh 希伯萊語
MacIceland Macintosh 冰島語
MacRoman Macintosh 羅馬語
MacRomania Macintosh 羅馬尼亞語
MacSymbol Macintosh 符號
MacThai Macintosh 泰國語
MacTurkish Macintosh 土耳其語
MacUkraine Macintosh 烏克蘭語
SJIS Shift-JIS, 日語
UTF8 UTF-8
❹ Java鍑虹幇h
濡傛灉鍦 Java 浠g爜涓鍑虹幇浜 ???h???錛岃繖鍙鑳芥槸鐢變簬緙栫爜闂棰樺艱嚧鐨勩傚叿浣撳湴璇達紝榪欏彲鑳芥槸鐢變簬浣跨敤浜嗛潪 UTF-8 緙栫爜淇濆瓨浜嗗寘鍚涓鏂囩殑婧愪唬鐮佹枃浠訛紝鎴栬呭湪緙栬瘧 Java 浠g爜鏃朵嬌鐢ㄤ簡閿欒鐨勭紪鐮佹牸寮忋
涓轟簡瑙e喅榪欎釜闂棰橈紝鍙浠ュ皾璇曚互涓嬫柟娉曪細
紜璁ょ紪鐮佹牸寮忥細浣跨敤鍚堥傜殑鏂囨湰緙栬緫鍣ㄦ墦寮 Java 浠g爜鏂囦歡錛屽苟紜璁ゅ叾緙栫爜鏍煎紡鏄鍚︿負 UTF-8銆傚傛灉涓嶆槸 UTF-8錛屽垯闇瑕佸皢鍏惰漿鎹涓 UTF-8 緙栫爜鏍煎紡銆
璁劇疆緙栫爜鏍煎紡錛氬湪緙栬瘧 Java 浠g爜鏃訛紝鍙浠ラ氳繃璁劇疆緙栫爜鏍煎紡鐨勬柟寮忚В鍐寵ラ棶棰樸備緥濡傦紝浣跨敤 javac 鍛戒護緙栬瘧 Java 浠g爜鏃訛紝鍙浠ユ坊鍔 -encoding UTF-8 鍙傛暟鎸囧畾緙栫爜鏍煎紡銆
淇鏀規簮浠g爜錛氬傛灉浠ヤ笂鏂規硶閮芥棤娉曡В鍐抽棶棰橈紝鍙浠ュ皾璇曚慨鏀規簮浠g爜銆傚皢 ???h??? 鏇挎崲涓轟腑鏂囧瓧絎﹀嵆鍙銆
❺ java 自動處理unicode編碼
感覺除非是對方修改,不然沒法處理,反斜杠開頭的,應該是被識別成了8進制的數字了
❻ Java鎬庝箞瀹炵幇鍒犻櫎涓涓猽nicode緙栫爜鐨勫瓧絎
鎶奻or閲岀殑瀛楃︿覆闆嗕腑鍒頒竴涓猻tring閲岋紝鐒跺悗閫氳繃鎴鍙杝tring錛岀劧鍚庡啀杈撳嚭銆
--
class Hello
{
public static void main(String[] args)
{
System.out.println("Hello World!\b ");
}
}
//鍚庝究鍐嶅氬姞涓絀烘牸\b灝變細鐢熸晥銆
//------------------
//鍗曠嫭杈撳嚭涔熷彲浠
class Hello
{
public static void main(String[] args)
{
System.out.print("Hello World!");
System.out.print("\b");
}
}