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会报出不能识别编码...

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

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

您的注册邮箱: 修改

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

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