贊助商連結

Java只有一種碼

by undefined

昨天在處理 CKIP Client 的遇到的

還跑去 [email protected] 去問了問題

其實不是問題,而是自己觀念不清楚

Java 在處理 String 上面,都是採用 Unicode 在處理,然而天真的我以為,要先轉成目標碼再塞進 String,這樣存取都是目的碼。其實應該是從 String 拿出來後再轉成目的碼,或是從目的碼轉成 Unicode 再塞進 String。

而 Java 在這方面處理就簡單的多,只要指定輸出碼與輸入碼就可轉成 Unicode,不像是 PHP 要透過 iconv 轉碼。

在實做 CKIP Client 中,傳送到中研院需要使用 big5 碼,而中研院回傳的也是 big5 碼,所以在 Java 中就要使用 big5 碼來傳送與接收。

1
2
3
4
5
6
7
8
// 傳送 code
Socket s = new Socket(this.serverIP, this.serverPort);

// 指定傳送編碼 big5
OutputStreamWriter osw = new OutputStreamWriter(s.getOutputStream(),"Big5");
PrintWriter pw = new PrintWriter(osw);
pw.println(d.asXML());
pw.flush();

這樣 Java 就以 big5 傳送到中研院
1
2
3
4
5
6
// 接收 code
// 指定接收編碼 big5
InputStreamReader isr = new InputStreamReader(s.getInputStream(),"Big5");
BufferedReader br = new BufferedReader(isr);

this.setReturnText(br.readLine());

接收回來的資料也要指定 big5 的編碼

這樣就可以完成 big5 的傳送與接收,而 Java 內部的 String 操作都以 Unicode 去操作,只有在輸入出才改變編碼。

又上了寶貴的一課


喜歡我們的文章可以按上面的 LIKE 給我們鼓勵喔!