当前位置:操作系统 > 安卓/Android >>

关于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来读取文件。

 


作者:tobacco5648

 


 

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,