【问题标题】:Weird characters result from reading/writing读/写产生奇怪的字符
【发布时间】:2012-09-28 00:08:52
【问题描述】:

我编写了一些简单的 Java 代码来从文本文件中读取字符串,将它们组合起来,然后将它们写回。 (输出没有变化的简化版本见下面的sn-p)

问题在于输入文件和输出文件中的特定字符(- 和 ...)不同。破折号和省略号在输出文件中显示为特殊的、不可读的字符。我不打算更改它们,并且我认为应该使用一些特殊的编码来避免这种情况。

我在 Windows 下运行。奇怪的字符出现在多个编辑器(记事本、写字板和 Word)中,而不是破折号和省略号。

BufferedReader inFile = new BufferedReader(new FileReader("in.txt"));
PrintWriter out = new PrintWriter(new FileWriter("out.txt"));
String line;
while ((line=inFile.readLine()) != null)
{
     out.println(line);
}

【问题讨论】:

  • 没有输入文件的格式信息不够
  • 你使用的怪异字符远远超出了 ASCII 编码的 255 个码位。例如,...(水平省略号)映射到 Unicode 代码点 2606(十六进制),并且没有等效的 ASCII 表示。尝试在您选择的编辑器(记事本、写字板和 Word、Eclipse)中使用 Unicode 字体,以便您能够正确查看它们。
  • 字符在输入文件中正常显示。一旦我将它读入 Java 字符串并将该字符串写入输出文件,它们看起来就像特殊字符。我只想照原样写出来。

标签: java file text character


【解决方案1】:

修订版

您的意见是在ANSI windows-1252

所以这应该可以解决问题:

public static void main(String[] args) throws Exception {

        File f = new File("in.txt");
        FileInputStream stream = new FileInputStream(f);
        BufferedReader reader = new BufferedReader(new InputStreamReader(stream, Charset.forName("windows-1252")));
        String x;
        BufferedWriter writer = new BufferedWriter(new FileWriter(new File("testing.txt")));

        while((x = reader.readLine()) != null) {
            writer.write(x);
            writer.newLine();
        }

        writer.close();
}

【讨论】:

  • 不,这是两个特殊的字符,破折号和省略号,在我将它们读入字符串后很奇怪。
  • 那我请你参考我在你的问题中的评论,我们不知道你在输入中使用的是什么类型的编码/格式。
  • 是的。我无法控制输入文件。稍后会发布。
  • 如何在此处附加文件?抱歉,我找不到办法。
  • @user1704891 使用文件上传服务并在您的问题上发布链接
【解决方案2】:

我遇到了同样的问题,我所做的是:

  • 首先,我确定所需的编码是什么,在我的情况下,我正在编辑一个现有文件并知道它的编码是什么,我输入下一个命令

    文件--mime-encoding in.txt

  • 然后知道什么是编码标准,您应该使用相同的标准创建 BufferedWriter 和 BufferedReader

    public static void main(String[] args) throws Exception {
    
        File f = new File("in.txt");
        FileInputStream stream = new FileInputStream(f);
        InputStreamReader conexion = new InputStreamReader(stream,"ISO-8859-1");
        BufferedReader reader = new BufferedReader(conexion);
        String x;
    
        OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("in.txt"),"ISO-8859-1");
    
        while((x = reader.readLine()) != null) {
            writer.write(x);
            writer.newLine();
        }
    
        writer.close();
    }
    

【讨论】:

    【解决方案3】:

    尝试在 BufferedReader 中使用 MimeType,如下所示:

        InputStream myFileStream = new FileInputStream("in.txt");
        BufferedReader inFile = new BufferedReader(new InputStreamReader(myFileStream , "utf-8"));
    

    如果上述方法没有帮助,请尝试将 mime 类型值更改为其他 mime 类型,例如“UTF-8”。如果还是不行,请分享你的“in.txt”文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      • 2013-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多