关于Android中的乱码

    在写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来读取文件。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值