用了很多种方法,包含使用通用转换类都不行,同样的文件在其它的机器里可以正常显示并读出到TextView,在我这台机器里就乱码(我用的是windowsxp),
另外:这个代码在Application里运行是正常的。只是启动Tomcat做为WebServer,再下载到模拟器的sdcard里,从android的sdcard读出时显示不正常。
特别强调的是:这个代码在其它的机器运行是正常的,没有乱码,只是在我的机器上才出现问题!所以我估计还是是字符编码的配合问题。
我用的方法有:
1)记事本中将文件另存为,编码为utf-8;
2)使用流编码(参见后面我列出的通用类)
3)在Eclipse 中把项目和文件的编码都设置成了UTF-8。
简单的流转换我用过了,不行。后面是我收集的一个通用类,给大家参考下:究竟还用什么原因导致乱码呢?请大家帮忙!
//-----------------------------------import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;public class ConvertFileCode {
public static BufferedReader converfile(InputStream inputStream) {
System.out.println("ConvertFileCode--------->" + inputStream);
BufferedInputStream bis = null;
BufferedReader reader = null;
try {
bis = new BufferedInputStream(inputStream);
bis.(4);
byte[] first3bytes = new byte[3];
// System.out.println("");
// 找到文档的前三个字节并自动判断文档类型。
bis.read(first3bytes);
bis.reset();
if (first3bytes[0] == (byte) 0xEF && first3bytes[1] == (byte) 0xBB
&& first3bytes[2] == (byte) 0xBF) {// utf-8 reader = new BufferedReader(new InputStreamReader(bis, "utf-8")); } else if (first3bytes[0] == (byte) 0xFF
&& first3bytes[1] == (byte) 0xFE) { reader = new BufferedReader(new InputStreamReader(bis, "unicode"));
} else if (first3bytes[0] == (byte) 0xFE
&& first3bytes[1] == (byte) 0xFF) { reader = new BufferedReader(new InputStreamReader(bis, "utf-16be"));
} else if (first3bytes[0] == (byte) 0xFF
&& first3bytes[1] == (byte) 0xFF) { reader = new BufferedReader(new InputStreamReader(bis, "utf-16le"));
} else { reader = new BufferedReader(new InputStreamReader(bis, "GBK"));//这里强制设置成UTF-8也不行
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return reader;
}
}
另外:这个代码在Application里运行是正常的。只是启动Tomcat做为WebServer,再下载到模拟器的sdcard里,从android的sdcard读出时显示不正常。
特别强调的是:这个代码在其它的机器运行是正常的,没有乱码,只是在我的机器上才出现问题!所以我估计还是是字符编码的配合问题。
我用的方法有:
1)记事本中将文件另存为,编码为utf-8;
2)使用流编码(参见后面我列出的通用类)
3)在Eclipse 中把项目和文件的编码都设置成了UTF-8。
简单的流转换我用过了,不行。后面是我收集的一个通用类,给大家参考下:究竟还用什么原因导致乱码呢?请大家帮忙!
//-----------------------------------import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;public class ConvertFileCode {
public static BufferedReader converfile(InputStream inputStream) {
System.out.println("ConvertFileCode--------->" + inputStream);
BufferedInputStream bis = null;
BufferedReader reader = null;
try {
bis = new BufferedInputStream(inputStream);
bis.(4);
byte[] first3bytes = new byte[3];
// System.out.println("");
// 找到文档的前三个字节并自动判断文档类型。
bis.read(first3bytes);
bis.reset();
if (first3bytes[0] == (byte) 0xEF && first3bytes[1] == (byte) 0xBB
&& first3bytes[2] == (byte) 0xBF) {// utf-8 reader = new BufferedReader(new InputStreamReader(bis, "utf-8")); } else if (first3bytes[0] == (byte) 0xFF
&& first3bytes[1] == (byte) 0xFE) { reader = new BufferedReader(new InputStreamReader(bis, "unicode"));
} else if (first3bytes[0] == (byte) 0xFE
&& first3bytes[1] == (byte) 0xFF) { reader = new BufferedReader(new InputStreamReader(bis, "utf-16be"));
} else if (first3bytes[0] == (byte) 0xFF
&& first3bytes[1] == (byte) 0xFF) { reader = new BufferedReader(new InputStreamReader(bis, "utf-16le"));
} else { reader = new BufferedReader(new InputStreamReader(bis, "GBK"));//这里强制设置成UTF-8也不行
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return reader;
}
}
解决方案 »
- 很急的android Notification问题 求解
- 请问大家如何实现,新版QQ浏览器(新怡版)那个侧边栏效果呢??
- 如何将android界面做的绚丽一点
- 有没有方法监控一个activity?
- 切换语系成中文后 字体效果消失了!
- fragment中 getActivity 报空指针
- 请问诸位大神,Android怎么实现图片转动
- 要写一个动态库,库里用到另一个库的函数
- android中程序退出怎样关闭GPS类似百度地图
- listview adapter 控件注册点击事件,点击一个item后有其他item的这个控件响应了事件
- android手机系统锁屏起来了,其他的提示框不会弹出来
- JNI惹的祸?
//----------------------------------
11-08 06:30:36.275: INFO/System.out(523): ConvertFileCode--------->java.io.FileInputStream@40559498
11-08
11-08 06:30:36.475: INFO/System.out(523): LrcProcessor--->temp:"$&)+.1368;=@CEHJLORUWY\^bdfikmqsvxz}��������������������������������������������������
在使用utf-8编码时,文件头出现了奇数个字节。结果导致使用字符流读出时出现乱码。
以上都是我的假想,还没有什么成熟的解决方法!另外在lrc文件在输出的时候,乱码的前面出现了ID3的字样,是不是跟lrc文件的版本有关系?