討論區快速選單
知識庫快速選單
政府補助!學嵌入式+物聯網 網路投保旅行平安險 傑米的攝影旅遊筆記
[ 回上頁 ] [ 討論區發言規則 ]
請問有關BIG5、Unicode之間的轉換
更改我的閱讀文章字型大小
作者 : mashimaro96(超勁爆賤兔)
[ 貼文 3 | 人氣 524 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/2/25 下午 01:29:15
例如,「一」這個字的 Big5 碼是 0xA440,而他的 Unicode 是 U+4E00

現在已經讀取到 A440 (42048) 並存入 char c 中

請問如何把 Big5 編碼 轉成 Unicode 編碼?

我試過以下的code

char c = (char)42048;
String tmp = "" + c;

System.out.println(new String(tmp.getBytes("BIG5"), "UNICODE"));

印出來還是 "?"


麻煩大家了^^
作者 : huah(Huah) C++優秀好手貼文超過200則
[ 貼文 292 | 人氣 263 | 評價 1910 | 評價/貼文 6.54 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人mashimaro96註記此篇回應為最佳解答 2006/2/26 上午 11:41:13
有幾個觀念要澄清一下,
1. unicode是所謂的character definition, 實際呈現在電氣訊號, 或存在於記憶
     體或儲存體, 必須有所謂的representation format, 一般是UTF8, UTF16,
    UTF32則比較少見.
2. Java內部char是以UNICODE型式呈現, 至於是UTF8或UTF16, 你不應做此假
     設, 目前可以確定的是在.class中的string constant是以UTF8儲存.
3. 要assign特殊值給char, 請用'\..', 如'\n', \u4E00', 不要用強迫cast的

所以你要做的實驗要
byte baChOneBig5[] = new byte[2];
baChOneBig5[0] = (byte)0xA4;
baChOneBig5[1] = (byte)0x40;
String sChOne = new String(baChOneBig5, "BIG5");

在你原先要做的東西, 好幾步都是錯的, 只要是char, string, 內部的format是一定
的, 你不應去假設他是那一種, 只要知道是unicode-base的就好, 其他的都是在對外
銜接時會由byte array轉入或轉出, 那時就會有byte array是要用那一種format

我試著做一些test codes, 要注意, 只要是char或string, 變數名稱我就沒加format,
只要是byte array, 一定有加Big5, UTF8, UTF16, 以代表representation format.
char caChOne[] = new char[1];
caChOne[0] = '\u4E00';
String sChOne = new String(caChOne);
System.out.println(sChOne);
try
{
    byte baChOneBig5[] = new byte[2];
    baChOneBig5[0] = (byte)0xA4;
    baChOneBig5[1] = (byte)0x40;
    System.out.println(new String(baChOneBig5, "BIG5"));
    baChOneBig5 = sChOne.getBytes("BIG5");
    System.out.print("BIG5:");
    for(int i = 0; i < baChOneBig5.length; ++i)
     System.out.print(String.format("%02X", baChOneBig5[i]));
    System.out.println();
    byte baChOneUTF8[] = sChOne.getBytes("UTF8");
    System.out.print("UTF8:");
    for(int i = 0; i < baChOneUTF8.length; ++i)
     System.out.print(String.format("%02X", baChOneUTF8[i]));
    System.out.println();
    byte baChOneUTF16[] = sChOne.getBytes("UTF16");
    System.out.print("UTF16:");
    for(int i = 0; i < baChOneUTF16.length; ++i)
     System.out.print(String.format("%02X", baChOneUTF16[i]));
    System.out.println();
}
catch(java.io.UnsupportedEncodingException e)
{
    ...

結果是


BIG5:A440
UTF8:E4B880
UTF16:FFFE4E00
作者 : mashimaro96(超勁爆賤兔)
[ 貼文 3 | 人氣 524 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/2/26 下午 03:12:53
我懂了
感謝^^
 板主 : 風月
 > Java入門一般區 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - Java入門一般區 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
Java入門一般區
1 洋將 2410 
2 Aron 2130 
3 Aries 1510 
4 DEMO999 1310 
5 Ben 990 
6 ramb 620 
7 ozzy 570 
8 tand 460 
9 Huah 410 
10 vindy 400 
Java入門一般區
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.03125