J2ME中文亂碼
J2ME中文亂碼
誰(shuí)在開(kāi)發(fā)過(guò)程中沒(méi)有遇到過(guò)中文亂碼,不管你是不是開(kāi)發(fā)J2ME的,舉手!我一直覺(jué)得這是一個(gè)很無(wú)語(yǔ)的問(wèn)題,不知道當(dāng)初那些整ISO-8859-1和ASCII的人有沒(méi)有遠(yuǎn)見(jiàn),暈了,多整8個(gè)bit要死啊,搞得現(xiàn)在這么麻煩。雖然我一直喜歡使用UTF-8來(lái)對(duì)我的所有代碼中出現(xiàn)的東西編碼,但是有的時(shí)候還是會(huì)遇到很多無(wú)語(yǔ)的問(wèn)題。因?yàn)楹芏嘞到y(tǒng)默認(rèn)是ASCII,有的是ISO-8859-1,還有的時(shí)候是咱自己的GBK,但是這些東西國(guó)際化的時(shí)候就麻煩了,倒過(guò)去倒過(guò)來(lái),浪費(fèi)生命。所以我建議使用UTF-8是一種非常不錯(cuò)的習(xí)慣。
接下來(lái)是一些常用的,可以避免亂碼的方法:
最簡(jiǎn)單的:
- new String(byte[] data,String str); //非常實(shí)用,String參數(shù)是你希望的編碼方式
- //e.g.
- String str = new String("中國(guó)".getBytes(),"UTF-8");
- //還行吧,呵呵
但是有的時(shí)候,人家什么編碼你是不知道的啊,所以想這種的話當(dāng)你確定用什么編碼方式的時(shí)候就郁悶了,而且即使通過(guò)一種復(fù)雜的途徑確定了編碼方式也是不太可取的,因?yàn)槲覀冃枰紤]到可移植性。所以接下來(lái)會(huì)有一種更為通用的方法。Following…
那就是byte[]了啊,如果byte[]都還不行…無(wú)言獨(dú)上西樓…月如鉤…
- String originalStr = "村里有個(gè)姑娘" ;
- String resultStr = null ;
- ByteArrayOutputStream baos ;
- DataOutputStream dos ;
- ByteArrayInputStream bais ;
- DataInputStream dis ;
- byte[] data ;
- //將任何字符串序列寫(xiě)入到輸出流中,通過(guò)輸出流將序列寫(xiě)入到ByteArrayOutputStream,然后獲得byte[]
- dos = new DataOutputStream(baos);
- dos.writeUTF(str);
- data = baos.toByteArray();
- //------------
- //將寫(xiě)入到流的字符串序列讀取回來(lái)
- bais = new ByteArrayInputStream(data);
- dis = new DataInputStream(bais);
- resultStr = dis.readUTF();
- System.out.println(resultStr); //在這里你可以得到村里那個(gè)姑娘
在Data Input/Output Stream中提供了一系列的readXxx()/writeXxx方法,查看API是最明白不過(guò)的了。所以有事沒(méi)事看看API也是一個(gè)很不錯(cuò)的習(xí)慣,當(dāng)然在你學(xué)習(xí)時(shí)間里。可不敢在和你老婆散步的時(shí)候去看API,不然你會(huì)倒霉的。哈哈!
由于這個(gè)方法避免了直接操作單個(gè)字符,而是以流的形式,都是二進(jìn)制的所以通用性應(yīng)該不會(huì)差到哪里去。所以呢,不只是中文字符可以用啦。包括日啊,韓文啊,阿拉伯啊,還有什么耶路撒冷啊,甚至腦殘一代使用的火星文都可以哦(如果不行的話那就是火星人的問(wèn)題)。哈哈~“趕緊試試吧。
下面還有:
posted on 2009-06-10 23:18 菲戈 閱讀(1040) 評(píng)論(0) 編輯 收藏