一段很简单读文件代码
public class TestFileReader {
public static void main(String[] args) {
FileReader fr=null;
BufferedReader br=null;
try {
fr=new FileReader("D:/ncolog1.txt");
br=new BufferedReader(fr);
String read=null;
while((read=br.readLine())!=null){
System.out.println(read);
}
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
if(fr!=null){
fr.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
在一台机器上测试输出正常数据,另外一台机器中文乱码。
查看JVM 文件编码参数
String encoding = System.getProperty("file.encoding");
输出正常机器上显示为GBK,中文乱码机器上显示为UTF-8.
用EditPlus查看ncolog1.txt编码为ANSI.
百度ANSI编码的信息
这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。
在简体中文系统下,ANSI 编码代表 GB2312 编码。
解决方法
1. 运行时,加虚拟机参数 -Dfile.encoding=GBK
2.
InputStreamReader read = new InputStreamReader(new FileInputStream("D:/ncolog1.txt"),"GBK");
BufferedReader reader=new BufferedReader(read);
附:
关于ansi编码的BUG
很多细心的人会发现,当新建文本文档只输入“联通”2字保存再打开时将是乱码。
当txt文档中一切字符都在 C0≤AA≤DF 80≤BB≤BF 这个范围时,notepad都无法确认文档地格式,没有自动依照UTF-8格式来"Display"。 而"联通"就是C1 AA CD A8,刚好在上面地范围内,所以不能正常显现。
记事本默认是以ANSI编码保存文本文档的,而正是这种编码存在的bug招致了上述怪现象。假如保存时选择Unicode、Unicode(big endian)、UTF-8编码就正常了。此外,假如以ANSI编码保存含有某些特别符号的文本文档,再次打开后符号也会变成英文问号。例如输入英文 this app can break 以ANSI编码保存也会变成乱码
分享到:
相关推荐
主要介绍了Java基于IO流读取文件的方法,涉及Java文件流操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
IO流读取和创建文件IO流读取和创建文件IO流读取和创建文件IO流读取和创建文件IO流读取和创建文件
java 使用IO流实现文件的复制 java 使用IO流实现文件的复制
通过IO流把文件传到前端并下载
它们的一些用法,作用
JAVAIO流总结宝典,分享给大家,总结较为全面
IO流文件的复制
文件流 读写操作,对java.io.*;中文件读写的一些相关信息
标准io流复制文件
Java实现文件复制,File文件读取,写入,IO流的读取写入
android的IO流读写文件操作示意程序
IO流的文件复制,和整个文件夹的复制,并检查是否复制成功,如果复制成功返回true,否则返回false
有需要的可以看看,io流的写入读取然后添加到数据库再就是删除!
通过java编程,实现使用IO流下载服务器文件,为HTTP层文件传输
java的IO流实现文件复制20190726.zip,使用的是字节流。
模拟网络通信IO流文件传递
Java中文件IO流.pdf 学习资料 复习资料 教学资源
java IO流操作,包括文件的读取,写入,上传和下载,支持文本数据和音频等文件
IO流文件操作(注释版),很详细,很实用
2、常用21个IO流:FileWriter、FileReader、CharArrayReader、CharArrayWriter、CharSequence、OutputStreamWriter、FileOutputStream、InputStreamReader、PrintWriter、BufferedReader、InputStream、...