直接上代码:
此类所在的 jar 包可以在这里下载到(只用到部分功能,我动手“精简”了一下):
http://download.csdn.net/detail/yang3wei/4163965
参考资料:http://liudeh-009.iteye.com/blog/1312117
读取一个UTF-8编码格式的文件,代码中起初用FileReader读取到一个字符串,然后转换字符集,结果就出问题了:
文件读入时是按OS的默认字符集即GBK解码的,我先用默认字符集GBK编码str.getBytes(“GBK”),此时应该还原为文件中的字节序列了,
然后再按UTF-8解码,生成的字符串按理说应该就应该是正确的。
为什么结果中还是有部分乱码呢?
问题出在FileReader读取文件的过程中,FileReader继承了InputStreamReader,但并没有实现父类中带字符集参数的构造函数,
所以FileReader只能按系统默认的字符集来解码,然后在UTF-8 -> GBK -> UTF-8的过程中编码出现损失,造成结果不能还原最初的字符。
之前还碰到过一个问题,读取一个别人上传的文件,本来约束是这个文件啊必须是UTF-8的,但是用户上传的文件,却是用GBK
编码的,导致将这个文件流读出,使用时,发现乱码无法真确识别其中信息。
如何解决呢?
首先,我不管源文件是采用什么编码,取得文件流,然后用org.apache.commons.io.IOUtils.toByteArray这个工具类中的API
FileInputStreamstream
= newFileInputStream(targetFile);
byte[] bytes = IOUtils.toByteArray(stream);
这样,就将文件流转化成字节数组,并且不丢失字节;然后,每个文件都有一段头信息,描述文件的字符编码,文件大小等等的信息,同一类字符编码的文件,
头几个字节是相同的,可以以此来判断文件的字符编码类型例如:UTF-8的文件,头2个字节,分别是‘-17’和‘-69’,;接着可以用String的带字符集的构造函数,
把文件还原出来。
另外,clps中不单需要读取源代码,还需要修改源代码,这时候,一定要保证编码格式的一致性,我采用的方式,模仿了文件的格式,返回给页面的
是一个文件对象,包含了文件内容实体,字符编码格式等信息,这样保存的时候,就可以得到这些信息。
分享到:
相关推荐
解决js运行得出的结果乱码的问题。(只需要发布web项目前将js文件转化一下即可。)
基于H5的FileReader实现web端读取shp文件,CSV文件,文本文件坐标,并加载到地图上
对CSV文件的读写,泛用性比较适合
本篇文章主要介绍了浅谈HTML5 FileReader分布读取文件以及其方法简介,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
主要为大家详细介绍了通过filereader接口读取文件,使用readAsDataURL方法预览图片的相关方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
文件阅读器filereader,一个用于读取本地文件的 jQuery 扩展这组实用程序允许我们直接从 jQuery 访问 HTML5 FileReader API。 可用功能: $.canReadFiles() 如果当前浏览器实现了 FileReader API,则返回 true $....
文件阅读器FileReader是开源的ac#库,用于通过设置limit和offset参数来分页读取和处理非常大的文本文件。 因为将整个文本文件加载到内存中会导致对象增长,并且.net如果无法为对象分配足够的连续内存,则会抛出OOM...
主要介绍了借助FileReader实现将文件编码为Base64后通过AJAX上传的方法,包括后端对文件数据解码并保存的PHP代码,需要的朋友可以参考下
主要介绍了HTML5 文件域+FileReader 分段读取文件并上传到服务器,需要的朋友可以参考下
FileReader文件阅读器代码
java FileReader/FileWriter读写字母和数字没问题,但读写汉字乱码。记录下,后面找到解决方法再补上。 public static void main(String[] args) { FileReader fr = null; FileWriter fw = null; try { int a =...
4.readAsText(file, [encoding]):将文件读取为文本,encoding缺省值为'UTF-8' */ var wb;//读取完成的数据 var rABS = false; //是否将文件读取为二进制字符串 function importf(obj) {//导入 if(!obj.files...
FileReader文档
Java读取文本文件内容Demo; 主要代码: char charArr[]=new char[1024]; //创建可容纳 1024 个字符的数组 FileReader b=new FileReader("D:\\temp\\test.txt"); int iNum=b.read(charArr); //将数据读入到数组 a ...
使用base64进行文件上传的具体流程是:前台使用js将文件转换为base64格式,后台通过高级编程语言,将base64格式的文件,转换为原文件。下面就来演示一下,C#语言配合js,如何实现图片的base64格式上传与解析保存。...
行阅读器使用 HTML5 文件 API 逐行读取文件。用法用户选择文件后: // Grab a file referencevar file = document . getElementById ( 'my-file-input' ) . files [ 0 ] ;// Create a new instance of the ...
本文实例讲述了jQuery实现文件编码成base64并通过AJAX上传的方法。...灵光一闪,利用javascript的FileReader对象将文件编码成base64再传服务器不就行了么~ 开始动手,丰衣足食。 前端对文件进行base64编码并通过aj