一段很简单读文件代码
public class TestFileReader {
public static void main(String[] args) {
FileReader fr=null;
BufferedReader br=null;
try {
fr=new FileReader("D:/ncolog1.txt");
br=new BufferedReader(fr);
String read=null;
while((read=br.readLine())!=null){
System.out.println(read);
}
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
if(fr!=null){
fr.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
在一台机器上测试输出正常数据,另外一台机器中文乱码。
查看JVM 文件编码参数
String encoding = System.getProperty("file.encoding");
输出正常机器上显示为GBK,中文乱码机器上显示为UTF-8.
用EditPlus查看ncolog1.txt编码为ANSI.
百度ANSI编码的信息
这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。
在简体中文系统下,ANSI 编码代表 GB2312 编码。
解决方法
1. 运行时,加虚拟机参数 -Dfile.encoding=GBK
2.
InputStreamReader read = new InputStreamReader(new FileInputStream("D:/ncolog1.txt"),"GBK");
BufferedReader reader=new BufferedReader(read);
附:
关于ansi编码的BUG
很多细心的人会发现,当新建文本文档只输入“联通”2字保存再打开时将是乱码。
当txt文档中一切字符都在 C0≤AA≤DF 80≤BB≤BF 这个范围时,notepad都无法确认文档地格式,没有自动依照UTF-8格式来"Display"。 而"联通"就是C1 AA CD A8,刚好在上面地范围内,所以不能正常显现。
记事本默认是以ANSI编码保存文本文档的,而正是这种编码存在的bug招致了上述怪现象。假如保存时选择Unicode、Unicode(big endian)、UTF-8编码就正常了。此外,假如以ANSI编码保存含有某些特别符号的文本文档,再次打开后符号也会变成英文问号。例如输入英文 this app can break 以ANSI编码保存也会变成乱码
分享到:
相关推荐
在Java编程中,读取包含中文字符的...通过理解和应用这些知识点,你可以有效地解决Java读取文件时出现的中文乱码问题。在实际开发中,对文件编码的理解和处理是至关重要的,能够确保程序正确地处理各种语言和字符集。
// 读取文件前四个字节 byte[] bytes = new byte[4]; stream.Read(bytes, 0, 4); // 检查字节序列以确定编码类型 if (bytes.SequenceEqual(new byte[] { 0xEF, 0xBB, 0xBF })) { targetEncoding = Encoding....
在VB(Visual Basic)编程中,读取记事本文件并确保无乱码是一项常见的任务。这主要涉及到文本文件的I/O操作以及字符编码的理解。记事本默认使用的是ANSI编码,但在处理多语言或者非ASCII字符时,可能会出现乱码问题...
4. **读取和压缩数据**:对于文件,打开输入流,读取文件内容,然后通过`ZipOutputStream`的`write`方法写入。对于目录,递归处理其下的所有子文件和子目录。 5. **关闭条目和流**:每写入一个条目后,调用`...
然而,当涉及到包含中文字符的文件或目录时,可能会遇到乱码问题。这个问题主要源于字符编码的不一致,通常需要正确设置字符集来确保中文字符在压缩和解压过程中能正确保存和读取。 首先,我们要理解ZIP格式本身并...
1. 确定编码:在读取文件前,了解或检测文件的编码格式,避免使用错误的编码导致乱码。 2. 使用`StreamReader`和`StreamWriter`的构造函数指定编码。 3. 文件编码转换:如果不确定文件编码,可以先读取为字节流,...
在Java编程中,读取文件时可能会遇到乱码问题,这通常是由于文件编码格式与程序期望的编码格式不一致导致的。本篇文章将深入探讨如何在Java中正确地读取不同编码格式的文件,以避免乱码现象。 首先,我们需要了解...
这里我们关注的是“文件解压和压缩”以及处理“中文乱码”的问题。在Java编程语言中,提供了多种库和工具来处理这些问题。 首先,`CompresszZipFile`是一个可能的自定义类或方法,它专门用于处理ZIP文件的解压。在...
在读取文件时,我们需使用`InputStreamReader`来指定输入流的编码。在示例中,我们使用`new InputStreamReader(new FileInputStream(f), "gbk")`创建一个GBK编码的输入流,然后通过`BufferedReader`进行按行读取。...
以上代码片段展示了如何利用Apache Commons IO库来处理中文乱码问题,使得在Java中进行ZIP文件的压缩和解压更加便捷和准确。在实际开发中,根据项目需求,可以选择使用标准库或者Apache Commons IO库,确保文件名和...
确保整个项目的资源文件都以UTF-8编码读取,避免在压缩过程中出现乱码。 总的来说,使用`ZipOutputStream`压缩文件需要注意文件名的编码问题,特别是处理包含非ASCII字符的文件名。通过指定正确的编码,我们可以...
Java IO流技术是Java平台中用于处理输入输出的重要机制,主要涵盖了流(Stream)、输入/输出IO和文件(File)的相关概念。这篇文章将详细介绍这些主题,帮助开发者理解和掌握Java中的文件操作。 1. **流(Stream)** 流...
// 读取文件内容并写入压缩流 using (var fileStream = File.OpenRead(file)) { StreamUtils.Copy(fileStream, stream); } // 关闭当前条目 stream.CloseEntry(); } } } ``` 4. 解压缩处理中文乱码: 解...
然而,当我们在Properties文件中写入中文字符时,常常会遇到乱码问题。这个问题通常由两个主要因素引起:编码格式不匹配和读写过程中的编码转换不当。 首先,Properties文件默认使用ISO-8859-1编码,这是Java的标准...
Java中的IO流是进行输入/输出操作的核心工具,主要用于数据的传输。IO流根据操作的数据单位分为字节流和字符流两大类,每类又分别有输入流和输出流。在Java的`java.io`包中,这四类基本抽象流为:InputStream(字节...
Java IO流是Java平台中处理输入输出操作的重要组成部分,它允许程序与外部设备(如硬盘、网络、内存等)进行数据传输。Java IO流分为两大类:字节流(Byte Stream)和字符流(Character Stream)。本文将详细介绍...
字符流主要用于处理文本数据,它能够避免字节流读取中文等多字节字符时可能出现的乱码问题。字符流是按照字符为单位进行读写的,每个字符通常占用两个字节。Java提供了一系列的字符流类,如`FileReader`和`...
在上述代码中,我们读取文件的每一行,然后将其分割成多个分页进行写入。需要注意的是,实际的分页逻辑可能更复杂,需要根据具体需求进行调整,比如在分页边界处处理换行符等。 至于文件的分页写入,一个常见的应用...
Java IO流文件编码实例代码 Java IO流文件编码是Java语言中的一种文件编码方式,它可以将文件转换成不同的编码格式,以便在不同的平台和系统中使用。在Java中,文件编码可以使用不同的方式,包括使用getBytes()方法...