OS.有一个UTF-8编码的文本文件,用FileReader读取到一个字符串,然后转换字符集:str=new String(str.getBytes(),"UTF-8");结果大部分中文显示正常,但最后仍有部分汉字显示为问号!
Java代码
1.public static List<String> getLines(String fileName){
2. List<String> lines=new ArrayList<String>();
3. try {
4. BufferedReader br = new BufferedReader(new FileReader(fileName));
5. String line = null;
6. while ((line = br.readLine()) != null) {
7. lines.add(new String(line.getBytes("GBK"),"UTF-8"));
8. }
9. br.close();
10. } catch (FileNotFoundException e) {
11. }catch (IOException e) {}
12. return lines;
13. }
public static List<String> getLines(String fileName){
List<String> lines=new ArrayList<String>();
try {
BufferedReader br = new BufferedReader(new FileReader(fileName));
String line = null;
while ((line = br.readLine()) != null) {
lines.add(new String(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,InputStreamReader isr=new InputStreamReader(new FileInputStream(fileName),"UTF-8");这样读取文件就会直接用UTF-8解码,不用再做编码转换。
Java代码
1.public static List<String> getLines(String fileName){
2. List<String> lines=new ArrayList<String>();
3. try {
4. BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(fileName),"UTF-8"));
5. String line = null;
6. while ((line = br.readLine()) != null) {
7. lines.add(line);
8. }
9. br.close();
10. } catch (FileNotFoundException e) {
11. }catch (IOException e) {}
12. return lines;
13. }
分享到:
相关推荐
基于H5的FileReader实现web端读取shp文件,CSV文件,文本文件坐标,并加载到地图上
对CSV文件的读写,泛用性比较适合
解决js运行得出的结果乱码的问题。(只需要发布web项目前将js文件转化一下即可。)
使用java语言,通过调用FileReader类读取txt文件中的数据。资源是可直接实现的代码。
主要为大家详细介绍了通过filereader接口读取文件,使用readAsDataURL方法预览图片的相关方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本篇文章主要介绍了浅谈HTML5 FileReader分布读取文件以及其方法简介,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
主要介绍了借助FileReader实现将文件编码为Base64后通过AJAX上传的方法,包括后端对文件数据解码并保存的PHP代码,需要的朋友可以参考下
java FileReader/FileWriter读写字母和数字没问题,但读写汉字乱码。记录下,后面找到解决方法再补上。 public static void main(String[] args) { FileReader fr = null; FileWriter fw = null; try { int a =...
文件阅读器filereader,一个用于读取本地文件的 jQuery 扩展这组实用程序允许我们直接从 jQuery 访问 HTML5 FileReader API。 可用功能: $.canReadFiles() 如果当前浏览器实现了 FileReader API,则返回 true $....
FileReader文档
文件阅读器FileReader是开源的ac#库,用于通过设置limit和offset参数来分页读取和处理非常大的文本文件。 因为将整个文本文件加载到内存中会导致对象增长,并且.net如果无法为对象分配足够的连续内存,则会抛出OOM...
4.readAsText(file, [encoding]):将文件读取为文本,encoding缺省值为'UTF-8' */ var wb;//读取完成的数据 var rABS = false; //是否将文件读取为二进制字符串 function importf(obj) {//导入 if(!obj.files...
主要介绍了HTML5 文件域+FileReader 分段读取文件并上传到服务器,需要的朋友可以参考下
FileReader testpublic static String fileRead(String filePath){ StringBuilder result = new StringBuilder(); File src = new File(filePath); FileReader fread = null; BufferedReader re = null; ...
本文实例讲述了jQuery实现文件编码成base64并通过AJAX上传的方法。...灵光一闪,利用javascript的FileReader对象将文件编码成base64再传服务器不就行了么~ 开始动手,丰衣足食。 前端对文件进行base64编码并通过aj
Java读取文本文件内容Demo; 主要代码: char charArr[]=new char[1024]; //创建可容纳 1024 个字符的数组 FileReader b=new FileReader("D:\\temp\\test.txt"); int iNum=b.read(charArr); //将数据读入到数组 a ...