在使用下面这个写法时候UTF-8文件编码 在读取时候出现乱码问题。
File myFile=new File("文件路径");
BufferedReader in = new BufferedReader(new FileReader(myFile));
应该修改为:
BufferedReader in = new BufferedReader(new InputStreamReader(
new FileInputStream(myFile), "UTF-8"));
如果使用INSA编码时候 请使用下面文件读取方式:
InputStreamReader reader = new InputStreamReader(
new FileInputStream(new File("文件路径")), "gb2312");
下面是我对文件编码的判断方法:
/**
* 上传文件编码判断
* */
public static String get_charset(File file) {
String charset = "GBK";
byte[] first3Bytes = new byte[3];
try {
boolean checked = false;
;
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream(file));
bis.mark(0);
int read = bis.read(first3Bytes, 0, 3);
if (read == -1)
return charset;
if (first3Bytes[0] == (byte) 0xFF && first3Bytes[1] == (byte) 0xFE) {
charset = "UTF-16LE";
checked = true;
} else if (first3Bytes[0] == (byte) 0xFE
&& first3Bytes[1] == (byte) 0xFF) {
charset = "UTF-16BE";
checked = true;
} else if (first3Bytes[0] == (byte) 0xEF
&& first3Bytes[1] == (byte) 0xBB
&& first3Bytes[2] == (byte) 0xBF) {
charset = "UTF-8";
checked = true;
}
bis.reset();
if (!checked) {
// int len = 0;
int loc = 0;
while ((read = bis.read()) != -1) {
loc++;
if (read >= 0xF0)
break;
if (0x80 <= read && read <= 0xBF) // 单独出现BF以下的,也算是GBK
break;
if (0xC0 <= read && read <= 0xDF) {
read = bis.read();
if (0x80 <= read && read <= 0xBF) // 双字节 (0xC0 - 0xDF)
// (0x80
// - 0xBF),也可能在GB编码内
continue;
else
break;
} else if (0xE0 <= read && read <= 0xEF) {// 也有可能出错,但是几率较小
read = bis.read();
if (0x80 <= read && read <= 0xBF) {
read = bis.read();
if (0x80 <= read && read <= 0xBF) {
charset = "UTF-8";
break;
} else
break;
} else
break;
}
}
}
bis.close();
} catch (Exception e) {
e.printStackTrace();
}
return charset;
}
调用时候判断编码方式UTF-8 或是 INSA编码:
BufferedReader br = null;
if (charset == "GBK") {
InputStreamReader reader = new InputStreamReader(
new FileInputStream(new File(filepath)), "gb2312");
br = new BufferedReader(reader);
}
if (charset == "UTF-8") {
br = new BufferedReader(new InputStreamReader(
new FileInputStream(filepath), "UTF-8"));
}
分享到:
相关推荐
在VB.NET编程中,处理文本文件是常见的任务之一,但有时候由于编码问题,读取的文本可能会出现乱码。这通常发生在文件的编码格式与程序读取时所使用的编码不一致的情况下。本教程将深入探讨如何在VB.NET中正确地读取...
在Java编程中,读取包含中文字符的文件时可能会遇到乱码问题,这通常是由于编码格式不匹配导致的。要解决这个问题,我们需要理解文件的原始编码格式,并在Java代码中正确地设置字符集。以下是一些相关的知识点: 1....
记事本默认使用的是ANSI编码,但在处理多语言或者非ASCII字符时,可能会出现乱码问题。下面将详细介绍如何在VB中正确地读取记事本文件,并将其内容赋值给一个string类型的变量。 首先,我们需要了解VB中的`...
3. **编码问题**:使用字符流时要注意指定正确的字符编码,以防止乱码问题。 4. **性能优化**:合理使用缓冲流(`BufferedReader`, `BufferedWriter`, `BufferedInputStream`, `BufferedOutputStream`)可以显著提高...
### 解决读写包含汉字的txt文件时乱码的问题 #### 概述 在使用C#进行编程时,处理文本文件尤其是包含汉字的txt文件,可能会遇到字符编码问题导致的乱码现象。本文将深入探讨如何在C#中正确地读写包含汉字的txt文件...
标题"java 文件编码转换"指的是使用Java来解决文件编码问题,而描述中提到的"提供一个jar包和一个java文件"则暗示了我们可以通过这两个文件实现这个功能。 首先,`chardet.jar`可能是一个字符集检测库,用于自动...
当处理包含中文字符的CSV文件时,可能会遇到乱码问题,这通常与文件编码设置有关。本篇文章将详细探讨如何在Java中解析CSV文件,并解决中文乱码的问题。 首先,我们需要了解如何使用Java的标准库`java.io`和`java....
要解决Java读取TXT文件中文乱码的问题,关键在于指定正确的编码方式。以下是使用`BufferedReader`和`FileReader`读取UTF-8编码的TXT文件的示例: ```java import java.io.BufferedReader; import java.io....
Java 读取 TXT 文本文件时遇到乱码问题通常是由于编码格式不匹配导致的。在 Java 中,当读取文本文件时,默认使用的是平台的默认编码,这在处理某些特定编码的文件时可能会引发乱码。以下是针对这个问题的详细解释和...
接着,字符流解决了字节流处理字符编码的问题,包括Reader和Writer两个类。FileReader和FileWriter是这两个类的直接子类,分别用于读取和写入文本文件。FileReader默认使用系统默认的字符编码读取文件,而FileWriter...
在Java编程中,遇到“java 读取文件乱码”的问题通常是由于编码格式不匹配导致的。当程序按照一种编码方式打开文件,而文件实际采用的是另一种编码时,就会出现乱码现象。解决这个问题需要理解Java中处理字符编码的...
总结,解决Java读取文件时的乱码问题,关键在于明确文件的编码格式并正确地在代码中指定。通过使用不同的IO类库和工具,以及自定义的编码检测方法,我们可以有效地处理各种编码的文件,确保数据的正确性。
在Windows Forms(Winform)应用开发中,遇到字符串转换出现乱码的问题是非常常见的。这通常涉及到字符编码的不一致或不正确处理。本篇将详细解释这个问题的原因,并提供解决方案。 一、乱码产生的原因 1. 文件...
`ZipUtil`是一个专门用于文件压缩的工具类,它解决了在处理包含中文字符的文件或目录时可能出现的乱码问题。`ZipEntry`是Java标准库`java.util.zip`包中的核心类,用于表示ZIP文件中的一个条目,它可以是文件或目录...
这个问题通常由两个主要因素引起:编码格式不匹配和读写过程中的编码转换不当。 首先,Properties文件默认使用ISO-8859-1编码,这是Java的标准编码。如果在文件中直接写入中文,而编辑器或程序以UTF-8或其他支持...
本主题将深入探讨“IO文件读取”的概念、方法以及如何在实际编程中应用这些知识。我们将重点关注Java语言,因为它是广泛使用的且具有丰富的IO库。 首先,我们来了解IO的基本概念。IO是指计算机系统与外部设备之间...
在IT行业中,文件内容的替换和文件编码格式的转换是常见的需求,特别是在处理大量文本文件时。本主题聚焦于如何使用Java源码实现这一功能,尤其是针对Eclipse开发环境中从GBK编码转换到UTF-8编码的过程。下面我们将...
在IT行业中,尤其是在Android开发中,处理文件编码格式与文件转码是常见的...这些方法可能包括对文件的读取、字节转换、编码检测和转码过程的封装,通过学习和理解这些代码,可以提升我们在实际项目中的编码处理能力。
这个问题主要源于字符编码的不一致,通常需要正确设置字符集来确保中文字符在压缩和解压过程中能正确保存和读取。 首先,我们要理解ZIP格式本身并不直接支持特定的字符集,而是依赖于存储的文件系统或程序的默认...
在实际开发中,应根据项目的具体需求选择合适的方法,确保能正确处理各种编码格式的文件,避免因为编码问题导致的乱码现象。同时,使用开源库可以提高代码的健壮性和兼容性,减少手动编码的复杂性。