Java只有一種碼

昨天在處理 CKIP Client 的遇到的

還跑去 JavaWorld@TW 去問了問題

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

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

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

在實做 CKIP Client 中,傳送到中研院需要使用 big5 碼,而中研院回傳的也是 big5 碼,所以在 Java 中就要使用 big5 碼來傳送與接收。 {% codeblock %}// 傳送 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 傳送到中研院 {% codeblock %}// 接收 code // 指定接收編碼 big5 InputStreamReader isr = new InputStreamReader(s.getInputStream(),"Big5"); BufferedReader br = new BufferedReader(isr);

this.setReturnText(br.readLine());``` 接收回來的資料也要指定 big5 的編碼

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

又上了寶貴的一課

Follow 院長與芊比媽 on Google News