FileReader读取文件里文乱码问题
有一个UTF-8编码的文本文件,用FileReader读取到一个字符串,然后转换字符集:str=newString(str.getBytes(),"UTF-8");结果大部分中文显示正常,但最后仍有部分汉字显示为问号!
Java代码
public static List<String> getLines(String fileName){
List<String> lines=newArrayList<String>();
try {
BufferedReader br = new BufferedReader(new FileReader(fileName));
String line= null;
while ((line= br.readLine()) != null) {
lines.add(newString(line.getBytes("GBK"),"UTF-8"));
}
br.close();
} catch (FileNotFoundException e){
}catch (IOException e){}
return lines;
}
public staticList<String> getLines(String fileName){
List<String> lines=new ArrayList<String>();
try {
BufferedReader br = new BufferedReader(newFileReader(fileName));
String line = null;
while ((line = br.readLine()) != null) {
lines.add(newString(line.getBytes("GBK"),"UTF-8"));
}
br.close();
} catch (FileNotFoundException e) {
}catch (IOException e) {}
return lines;
}
文件读入时是按OS的默认字符集即GBK解码的,我先用默认字符集GBK编码str.getBytes(“GBK”)。此时应该还原为文件里的字节序列了。然后再按UTF-8解码,生成的字符串按理说应该就应该是正确的。
为什么结果中还是有部分乱码呢?
问题出在FileReader读取文件的过程中,FileReader继承了InputStreamReader。但并没有实现父类中带字符集參数的构造函数,所以FileReader仅仅能按系统默认的字符集来解码,然后在UTF-8
-> GBK-> UTF-8的过程中编码出现损失,造成结果不能还原最初的字符。
原因明白了,这个问题解决起来并不困难。用InputStreamReader取代FileReader,InputStreamReaderisr=new InputStreamReader(new FileInputStream(fileName),"UTF-8");这样读取文件就会直接用UTF-8解码。不用再做编码转换。
Java代码
public static List<String> getLines(String fileName){
List<String> lines=newArrayList<String>();
try {
BufferedReader br=new BufferedReader(new InputStreamReader(newFileInputStream(fileName),"UTF-8"));
String line= null;
while ((line= br.readLine()) != null) {
lines.add(line);
}
br.close();
} catch (FileNotFoundException e){
}catch (IOException e){}
return lines;
}
相关文章
- 【C#】创建、解析 xml 文件(XmlDocument 方式)
- zencart 模板文件说明
- C/C++ 读取文件16进制格式
- 【git】使用git上传文件到仓库失败bug记录
- PHP readdir()和scandir():读取目录下的文件及文件夹
- Linux下查看编辑二进制文件:hexedit神器详解程序员
- Java读取Excel文件详解编程语言
- maven java读取maven的pom.xml文件详解编程语言
- java读取csv文件详解编程语言
- MySQL结果实施:掌握 .jar 文件(mysql.jar)
- 传输Linux下快速安全的FTP文件传输(linuxftp文件)
- Linux下快速删除文件的记录(linux删除文件记录)
- Oracle挖掘文件路径的秘密(oracle读取文件路径)
- 文件Linux下如何设置只读文件(linux只读)
- 掌握Linux目录树,明确文件位置(linux目录树)
- 如何在macOS上解压RAR文件?(macosrar)
- MSSQL如何快速读取文件(mssql 读取文件)
- MSSQL技术实现文件的高效读取(mssql 读取文件)
- MySQL命令使用小白必备的BAT文件(bat mysql命令)
- MySQL中如何写文件地址(mysql中写文件地址)
- Oracle数据库实现响应数据文件保存(oracle保存响应文件)
- 解析Redis连接日志文件研究(redis 连接日志文件)
- 下载文件的点击数回填
- JS幻想读取二进制文件
- php读取文件乱码问题
- sqlserver文件数据库和关系数据库的比较
- ASP下载时重命名已上传文件的新下载文件名的实现代码
- 用ASP读取/写入UTF-8编码格式的文件
- js文件缓存之版本管理详解
- python读取Androidpermission文件
- java自动根据文件内容的编码来读取避免乱码
- PHP读取大文件的类SplFileObject使用介绍
- 在Oracle中导入dmp文件的方法