谁在开发过程中没有遇到过中文乱码,不管你是不是开发J2ME的,举手!我一直觉得这是一个很无语的问题,不知道当初那些整ISO-8859-1和ASCII的人有没有远见,晕了,多整8个bit要死啊,搞得现在这么麻烦。虽然我一直喜欢使用UTF-8来对我的所有代码中出现的东西编码,但是有的时候还是会遇到很多无语的问题。因为很多系统默认是ASCII,有的是ISO-8859-1,还有的时候是咱自己的GBK,但是这些东西国际化的时候就麻烦了,倒过去倒过来,浪费生命。所以我建议使用UTF-8是一种非常不错的习惯。
接下来是一些常用的,可以避免乱码的方法:
最简单的:
- new String(byte[] data,String str); //非常实用,String参数是你希望的编码方式
- //e.g.
- String str = new String("中国".getBytes(),"UTF-8");
- //还行吧,呵呵
但是有的时候,人家什么编码你是不知道的啊,所以想这种的话当你确定用什么编码方式的时候就郁闷了,而且即使通过一种复杂的途径确定了编码方式也是不太可取的,因为我们需要考虑到可移植性。所以接下来会有一种更为通用的方法。Following…
那就是byte[]了啊,如果byte[]都还不行…无言独上西楼…月如钩…
- String originalStr = "村里有个姑娘" ;
- String resultStr = null ;
- ByteArrayOutputStream baos ;
- DataOutputStream dos ;
- ByteArrayInputStream bais ;
- DataInputStream dis ;
- byte[] data ;
- //将任何字符串序列写入到输出流中,通过输出流将序列写入到ByteArrayOutputStream,然后获得byte[]
- dos = new DataOutputStream(baos);
- dos.writeUTF(str);
- data = baos.toByteArray();
- //------------
- //将写入到流的字符串序列读取回来
- bais = new ByteArrayInputStream(data);
- dis = new DataInputStream(bais);
- resultStr = dis.readUTF();
- System.out.println(resultStr); //在这里你可以得到村里那个姑娘
在Data Input/Output Stream中提供了一系列的readXxx()/writeXxx方法,查看API是最明白不过的了。所以有事没事看看API也是一个很不错的习惯,当然在你学习时间里。可不敢在和你老婆散步的时候去看API,不然你会倒霉的。哈哈!
由于这个方法避免了直接操作单个字符,而是以流的形式,都是二进制的所以通用性应该不会差到哪里去。所以呢,不只是中文字符可以用啦。包括日啊,韩文啊,阿拉伯啊,还有什么耶路撒冷啊,甚至脑残一代使用的火星文都可以哦(如果不行的话那就是火星人的问题)。哈哈~“赶紧试试吧。
下面还有:
- 2009年05月28日 -- J2ME开发之手机键值适配
- 2009年05月23日 -- J2ME Canvas
- 2009年05月10日 -- 使用NetBeans开发J2ME
- 2009年05月8日 -- KXML2部分详解(J2ME)