读取一个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 = new FileInputStream(targetFile);
byte[] bytes = IOUtils.toByteArray(stream);
这样,就将文件流转化成字节数组,并且不丢失字节;然后,每个文件都有一段头信息,描述文件的字符编码,文件大小等等的信息,同一类字符编码的文件,
头几个字节是相同的,可以以此来判断文件的字符编码类型例如:UTF-8的文件,头2个字节,分别是‘-17’和‘-69’,;接着可以用String的带字符集的构造函数,
把文件还原出来。
另外,clps中不单需要读取源代码,还需要修改源代码,这时候,一定要保证编码格式的一致性,我采用的方式,模仿了文件的格式,返回给页面的
是一个文件对象,包含了文件内容实体,字符编码格式等信息,这样保存的时候,就可以得到这些信息。
分享到:
相关推荐
*乱码的问题是由于文件的编码格式引起的 * 使用 InputStreamReader 对象可以解决乱码的问题 * TXT 文件有四种编码选项:ANSI、Unicode、Unicode big endian 和 UTF-8 * 默认情况下,TXT 文件的编码格式是 ANSI 编码 ...
在IT行业中,CSV(Comma Separated Values)文件是一种广泛使用的数据交换格式,因其简单、通用而备受青睐。本文将深入探讨如何读取和创建CSV文件,并特别关注自动解析文件编码方式这一关键环节。我们将使用Java语言...
如果CSV文件是以UTF-8编码的,但Java程序在读取时假设它是GBK或其他编码,就会导致乱码。反之亦然。 解决Java读取CSV文件中文乱码问题的步骤如下: 1. **指定字符编码**:在使用`BufferedReader`或者`FileReader`...
SHP文件是一种常见的地理信息系统(GIS)文件格式,用于存储矢量图形数据,如点、线和多边形。它通常与DBF、SHX等关联文件一起使用,存储属性信息和索引数据。SHP文件不包含颜色或图层信息,需要额外的文件配合才能...
解决js运行得出的结果乱码的问题。(只需要发布web项目前将js文件转化一下即可。)
JavaScript通过FileReader接口读取文件的知识点主要涵盖了如何使用FileReader对象来读取本地文件系统中的文件,其中重点介绍了使用readAsDataURL方法来预览图片文件。这一过程涉及到前端开发中的文件操作与DOM操作,...
在Java编程中,遇到“java 读取文件乱码”的问题通常是由于编码格式不匹配导致的。当程序按照一种编码方式打开文件,而文件实际采用的是另一种编码时,就会出现乱码现象。解决这个问题需要理解Java中处理字符编码的...
Java 读取 TXT 文本文件时遇到乱码问题通常是由于编码格式不匹配导致的。在 Java 中,当读取文本文件时,默认使用的是平台的默认编码,这在处理某些特定编码的文件时可能会引发乱码。以下是针对这个问题的详细解释和...
在Java编程中,读取文件时可能会遇到乱码问题,这通常是由于文件编码格式与程序期望的编码格式不一致导致的。本篇文章将深入探讨如何在Java中正确地读取不同编码格式的文件,以避免乱码现象。 首先,我们需要了解...
乱码通常出现在字符编码不匹配的情况下,即数据存储或传输时采用的编码格式与读取或显示时使用的编码格式不一致。在Java中,文件、网络流、数据库、控制台等都可能成为乱码的来源。 中文乱码问题在Java中的表现多种...
根据给定的文件信息,我们可以总结出一系列关于Java中读取文件的方法,这些方法涵盖了不同层次的数据读取,包括字节、字符以及行级别的读取。以下是对这些知识点的详细阐述: ### Java读取文件方法大全:读取File流...
在Java编程中,读取和写入中文字符时经常遇到乱码问题,这主要是由于编码格式不匹配导致的。本文将深入探讨这个问题,并提供一种彻底解决JAVA读取写入TXT中文乱码问题的方法。 首先,我们需要理解编码的本质。在...
如果不进行正确的编码转换,就可能会出现中文乱码问题。Java 提供了多种编码方式,例如 UTF-8、GBK、ISO-8859-1 等。在读取和写入文件时,需要选择合适的编码方式,以避免中文乱码。 在给定的代码中,使用了 UTF-8 ...
CSV(Comma Separated Values)文件是一种常见的数据存储格式,广泛用于数据交换和数据分析。它以纯文本形式存储表格数据,每一行代表一个记录,每个字段由逗号分隔。在编程领域,处理CSV文件是常见的任务,尤其在...
在Java编程中,读取中文文件时可能会遇到乱码问题,这是由于字符编码不匹配导致的。本篇文章将深入探讨这个问题,并提供解决方案。 首先,我们要理解什么是字符编码。字符编码是用来表示文本中字符的一种方式,常见...
在Java编程中,读取和写入TXT文件时,经常遇到中文乱码的问题。这是因为Java默认的字符编码可能与TXT文件的实际编码不一致,导致字符无法正确解析。本篇文章将深入探讨这个问题,并提供完整的源码解决方案。 首先,...
3. readAsText(file, [encoding]):该方法将文件读取为文本,其中可选参数encoding指定了文本的编码格式。 4. readAsArrayBuffer(file):该方法将文件读取为ArrayBuffer。 除了上述读取方法外,FileReader还定义了...
如果需要读取图片数据,可以使用`ImageIO`类或其他图像处理库,但这超出了“按顺序读取文件”的范畴,因为图片数据通常是二进制格式,而非文本。 总结起来,Java中按顺序读取文件主要依赖于I/O流,特别是`...