ITKeyword,专注技术干货聚合推荐

注册 | 登录

关于Android中的乱码

tobacco5648 分享于 2012-05-12

    在写Android应用时经常会遇到读取乱码的问题,这里总结下我所遇到的乱码相关问题:

    首先,我用的是Eclipse集成开发环境,刚开始时在.java文件中含有汉字时,Eclipse会报出不能识别编码的错误,这个问题的解决办法是修改Eclipse的编码配置,方法是:

    点击"Windows"->"Preferences"->"General"->"Content Types",把"Java Source File"的"Default encoding"配置为支持汉字的编码格式,我的修改为utf-8,还可以修改为utf-16,GBK等。

    其他得与开发环境相关的乱码问题一般都可以在这里解决,比如修改xml文件的配置格式等。

    然后,又遇到了读取assets文件的乱码问题,因为Android读取文件时,如果没有正确设置读取格式,Android会利用默认的编码格式来读取,如果assets文件的编码格式与Android的默认格式不相符,就会出现乱码问题,这个问题的解决办法为:

    在利用InputStreamReader读取文件的InputStream时,设置读取的编码格式为assets的编码格式,这个就要求你要事先知道assets文件的编码格式。

    比如我的assets文件sources.lws文件是利用搜狗输入法(可以设置字符集)编写的,默认字符集GBK,然后就可以利用以下代码获取读取sources.lws的BufferedReader:

    is = getResources().getAssets().open("library.lws");
    BufferedReader br=new BufferedReader(new InputStreamReader(is,"GBK"));

    然后就可以利用BufferedReader读取文件中的字符了(当然你也可以直接用InputStreamReader)。

    这种方法比较简单,但是你必须知道所要打开的文件的编码格式。

    如果事先不知道编码格式,也可以先读取几个字节的数据来判断文件所用的编码格式。这就要利用到各种编码格式的特点。

    

      File file = new File(filepath);

              BufferedReader reader;

              String text = "";     

                     FileInputStream   fis = new FileInputStream(file);

                     BufferedInputStrea    min = new BufferedInputStream(fis);

                     in.mark(4);

                     byte[]first3bytes = new byte[3];

                     in.read(first3bytes);

                     in.reset();

                     if(first3bytes[0] == (byte) 0xEF && first3bytes[1] == (byte) 0xBB

                                   &&first3bytes[2] == (byte) 0xBF) {// utf-8

 

                            reader = new BufferedReader(newInputStreamReader(in, "utf-8"));

 

                     }else if (first3bytes[0] == (byte) 0xFF

                                   &&first3bytes[1] == (byte) 0xFE) {

 

                            reader = new BufferedReader(

                                          new InputStreamReader(in,"unicode"));

                     }else if (first3bytes[0] == (byte) 0xFE

                                   &&first3bytes[1] == (byte) 0xFF) {

 

                            reader = new BufferedReader(newInputStreamReader(in,

                                          "utf-16be"));

                     }else if (first3bytes[0] == (byte) 0xFF

                                   &&first3bytes[1] == (byte) 0xFF) {

 

                            reader = new BufferedReader(newInputStreamReader(in,

                                          "utf-16le"));

                     }else {

 

                            reader = new BufferedReader(newInputStreamReader(in, "GBK"));

                     }

    这段代码可以判断文件的编码格式,然后针对不同格式创建不同的BufferedReader来读取文件。

    在写Android应用时经常会遇到读取乱码的问题,这里总结下我所遇到的乱码相关问题:     首先,我用的是Eclipse集成开发环境,刚开始时在.java文件中含有汉字时,Eclipse会报出不能识别编码

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。