`
mypyg
  • 浏览: 551574 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

关于使用InputStreamReader读取GBK编码文件乱码的问题

阅读更多
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(packageFilePath)));

当使用此Reader读取GBK编码的文件时,所有的中文都会乱码,因为Reader会将读取到的byte转换成char,如果没有指定转换编码,那么Android默认是使用的utf8,那么读取到的内容就会错误。

那么假如读取完毕后进行一次转码是否可以解决乱码问题呢?
比如:
String s = readline();
s = new String(s.getBytes("gbk"), "gbk");

思路是获得字符串的gbk编码,按照gbk编码重新解析一遍,实验证明是不可以的,是什么原因呢?

举例说明:
byte ge[] = {(byte)0xb8, (byte)0xf6};

这是汉字‘个’的gbk编码。
String s = new String(ge, "gbk");
此时s不会是乱码。
s.getBytes("utf8") //得到-28,-72,-86。‘个’的utf8编码
s.getBytes("gbk") //得到0xb8,0xf6。‘个’的gbk编码

而如果用一下代码生成s:
String s = new String(ge, "utf8");

此时s已经是乱码。
s.getBytes("utf8") //得到-17,-65,-67,-17,-65,-67

此时s的内容已经完全乱掉了,所以再用
s.getBytes("gbk");

得到的数据也是乱的,无法逆向出真正的内容来。

所以要解决这个问题只能是让reader将byte转向char时使用正确的编码,即生成Reader时指定编码,即:
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(packageFilePath), "gbk"));

0
1
分享到:
评论
1 楼 文艺吧网 2017-05-16  
还有一个GZIP的问题,我怎么转都乱码最后是因为要解压一下http://www.sojson.com/blog/227.html

相关推荐

    Java读取TXT文本文件乱码解决方案.doc

    在文章中,还提供了一些关于 TXT 文件编码格式的信息。TXT 文件有四种编码选项:ANSI、Unicode、Unicode big endian 和 UTF-8。默认情况下,TXT 文件的编码格式是 ANSI 编码,也就是系统的默认编码,通常是 GBK 编码...

    java读写csv文件,中文乱码问题

    可以使用工具,如Notepad++,来检查和更改文件编码。 4. **处理BOM头**:UTF-8有带BOM和不带BOM两种形式,如果文件开头带有BOM标记,可能需要在读取时进行特殊处理,因为某些库可能不支持带BOM的UTF-8。 5. **使用...

    关于GBK和Unicode字符集转换乱码问题

    ### 关于GBK和Unicode字符集转换乱码问题 在计算机科学与互联网技术中,字符集是一种用于表示文本的标准集合,不同的字符集适用于不同的语言环境。本文将深入探讨GBK与Unicode这两种字符集之间的转换问题,特别是在...

    java读写文件避免中文乱码.docx

    Java 读写文件避免中文乱码 Java 语言在读写文件时,经常会 gặp到中文乱码的问题。这是因为 Java 默认使用的...为了避免中文乱码,需要在读取和写入文件时,使用正确的编码方式,并选择合适的编码方式进行编码转换。

    彻底解决android读取中文txt的乱码(自动判断文档类型并转码

    通过以上步骤,我们可以实现一个相对完整的读取中文TXT文件的解决方案,即使文件编码未知,也能自动判断并转换,避免乱码问题。在实际开发中,建议结合具体需求选择合适的方法,确保代码的稳定性和效率。 当然,...

    Android读取本地json文件的方法(解决显示乱码问题)

    以下将详细讲解如何在Android中读取本地JSON文件,并解决可能出现的显示乱码问题。 1. **读取本地JSON文件(但显示汉字乱码)** 这个问题通常发生在读取文件时没有正确指定字符编码。在Android中,我们通常使用`...

    java 解析csv文件例子,csv文件 中文乱码问题

    当处理包含中文字符的CSV文件时,可能会遇到乱码问题,这通常与文件编码设置有关。本篇文章将详细探讨如何在Java中解析CSV文件,并解决中文乱码的问题。 首先,我们需要了解如何使用Java的标准库`java.io`和`java....

    Android读取中文文件乱码解决方法

    2. **正确设置读取编码**:根据识别出的文件编码格式,使用相应的字符集来解析文件内容。 #### 四、具体实现步骤 1. **创建文件输入流**:通过`FileInputStream`创建一个文件输入流对象,用于读取指定路径的文件。...

    java读取文件中文乱码

    在Java编程中,读取包含中文字符的文件时可能会遇到乱码问题,这通常是由于编码格式不匹配导致的。要解决这个问题,我们需要理解文件的原始编码格式,并在Java代码中正确地设置字符集。以下是一些相关的知识点: 1....

    批量转javaGBK编码文件到UTF-8

    2. **读取GBK文件**:使用Java的`InputStreamReader`和`BufferedReader`,指定GBK作为输入流的字符编码,读取文件内容。 3. **转换编码**:创建一个新的`OutputStreamWriter`和`BufferedWriter`,指定UTF-8作为输出...

    乱码 编码方式解决 gbk ISO8859-1 utf8 编码

    3. **转换文件编码**:如果文件的编码不正确,可以先检测其实际编码,然后使用相应的工具将其转换为所需的编码格式。例如使用Notepad++等文本编辑器进行编码转换。 4. **统一编码标准**:在开发过程中尽可能地使用...

    IDEA编码GBK不可映射字符解决方法

    5. **在代码中指定编码**:如果是在读取文件时遇到问题,可以确保在读取流时明确指定GBK编码,例如在Java中使用`InputStreamReader`和`BufferedReader`。 6. **版本控制设置**:如果你使用Git等版本控制系统,确保....

    Java读取TXT文本文件乱码解决方案.pdf

    例如,如果文件采用 UTF-16 编码,而 Java 代码使用默认的GBK编码去读取,那么就会产生乱码。 2. **解决方法**: - 使用 `BufferedReader` 和 `FileReader` 读取文件时,可以指定编码格式。在示例代码中,通过将 `...

    hadoop中文乱码问题

    如果在上传到HDFS的文件编码与Hadoop默认的UTF-8不符,下载时就会出现乱码。解决方式是确保在上传文件前将其转换为UTF-8编码。 3. **MapReduce处理阶段**: MapReduce作业中的Mapper和Reducer可能会接收到乱码数据...

    使用MyEclipse遇到的乱码问题解决

    - 在处理文本输入输出时,使用`InputStreamReader`和`OutputStreamWriter`配合指定的字符集进行读写操作,避免乱码。 通过以上步骤,大部分MyEclipse中的乱码问题都能得到解决。在日常开发中,养成良好的编码习惯...

    Java读取TXT文本文件乱码解决方案.docx

    Java 读取 TXT 文本文件时遇到乱码问题通常是由于编码格式不匹配导致的。...同时,为了防止不必要的编码问题,建议在创建和保存文本文件时明确指定编码,例如使用 UTF-8,因为它是目前最广泛支持的标准编码。

    java解析文件乱码解决

    7. **IDE设置**:确保集成开发环境(IDE)的编码设置与项目文件编码一致,避免在IDE内部处理文件时产生乱码。 8. **国际化和本地化**:对于多语言支持的项目,需要考虑不同地区的编码习惯,使用适当的字符集。 9. ...

    解决android读取中文乱码 自动判断文档类型并转码

    Android 读取中文 txt 文件时经常会出现乱码问题,主要是因为文档的编码格式不确定,从而导致读取时出现乱码。为了解决这个问题,我们可以通过自动判断文档类型并转码来解决乱码问题。 在 Java 中,我们可以使用 ...

    android GBK转换为String

    在Android系统中,大部分内部操作都是基于Unicode的,但有时候我们需要与GBK编码的数据进行交互,比如读取GBK格式的文本文件或网络数据。本文将深入探讨如何在Android中进行GBK与Unicode之间的转换。 首先,我们...

Global site tag (gtag.js) - Google Analytics