【问题标题】:java bufferedReader, writes something different than it readsjava bufferedReader,写入与读取不同的内容
【发布时间】:2009-09-14 13:33:11
【问题描述】:

我用 Java 中的 BufferedReader 和 BufferedWriter 解析了一个文本(CAL 代码),不幸的是,我用 outStream.write(line); 编写了红色的行;有变化,请看截图:

http://uploadz.eu/images/4qz8mtkm2d9zx3x5ms3n.png h**p://uploadz.eu/images/c03hgkrgrmit2ij2mug.png

如你所见,一些特殊字符确实改变了行,虽然我不打算改变它们。

据我所知,Bufferedwriter / Reader 默认应该在 unicode 中工作。

【问题讨论】:

    标签: java bufferedreader cal navision bufferedwriter


    【解决方案1】:

    BufferedWriterBufferedReader 与编码无关 - 它们从不处理实际编码,因为它们只是在缓冲现有的读取器和写入器。

    现在 FileWriterFileReader 使用默认系统编码 (urgh)。要解决此问题,您通常应该使用 InputStream / InputStreamReaderOutputStream / OutputStreamWriter 对(可能包含在 BufferedReader / BufferedWriter 中),并明确指定编码。

    您还没有说您实际读取的内容 - 它是一个文件吗?你知道文件的编码吗?

    【讨论】:

    • BufferedWriter df = new BufferedWriter(new OutputStreamWriter("out.txt"));不起作用。它是一个 .txt 文件。不幸的是我不知道文件的编码。
    • 我发现:它应该是 ANSI。我很感激进一步的建议。
    • "ANSI" 不是一种单一的编码。它可以表示各种不同的编码,通常是 ASCII 的 8 位扩展。
    • @dayscott:您不能只指定 OutputStreamWriter 的文件名。 OutputStreamWriter 的构造函数将 OutputStream 作为其参数。所以将“out.txt”替换为:new FileOutputStream(“out.txt”)。您可能还会发现 stackoverflow.com/questions/499010 很有用
    【解决方案2】:

    如果您要将内容视为文本(字符串),或者当复制是您的目标时,您应该知道编码,或者将内容视为字节数组。

    【讨论】:

    • firefox: uploadz.eu/images/7anvv8hok4bdt2ewylt1.jpg java compiler: "Cp1252" 我用谷歌搜索“Cp1252”似乎是java“标准”字符集。
    • wordStream = new FileInputStream("x.txt"); InputStreamReader 输入 = null;输入 = 新 java.io.InputStreamReader(wordStream, "Cp1252" ); reader = new BufferedReader(input);字符串 str;试试 { while((str = reader.readLine()) != null){ System.out.println(str); } 不幸的是,输出仍然是错误的编码。
    • 问题解决了!只需使用 RandomAccessFile 类。我使用了 readLine 和 writeBytes。作为分隔符,我使用 System.getProperty("line.separator") - 运行 Win XP。感谢支持人员:)
    猜你喜欢
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 2018-01-03
    相关资源
    最近更新 更多