Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 阅读/写作会产生奇怪的字符_Java_File_Text_Character - Fatal编程技术网

Java 阅读/写作会产生奇怪的字符

Java 阅读/写作会产生奇怪的字符,java,file,text,character,Java,File,Text,Character,我编写了一些简单的Java代码,从文本文件中读入字符串,组合它们,然后将它们写出来。(请参阅下面的代码片段,以获得输出没有更改的简化版本) 问题是输入文件和输出文件中的特定字符(-和…)不同。破折号和省略号在输出文件中显示为特殊的、不可读的字符。我并不打算改变它们,我认为我应该使用一些特定的编码来避免这种情况 我在Windows下运行。奇怪的字符出现在多个编辑器(记事本、写字板和Word)中,而不是虚线和省略号 BufferedReader inFile = new BufferedReader

我编写了一些简单的Java代码,从文本文件中读入字符串,组合它们,然后将它们写出来。(请参阅下面的代码片段,以获得输出没有更改的简化版本)

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

我在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);
}

修订版

您的输入在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();
}

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

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

如果上面没有帮助,请尝试将mime类型值更改为其他mime类型,例如“utf-8”。如果仍然不起作用,请共享您的“in.txt”文件。

我也有同样的问题,我所做的是:

  • 首先,我想知道所需的编码是什么,在我的例子中,我正在编辑一个现有的文件,为了知道它的编码是什么,我键入下一个命令 文件--在.txt中进行mime编码

  • 然后知道什么是编码标准,您应该使用相同的标准创建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();
    }
    

如果没有输入文件的格式,就没有足够的信息。您使用的奇怪字符远远超过了ASCII编码的255个代码点。例如,
(水平省略号)映射到Unicode代码点2606(十六进制),并且没有等效的ASCII表示形式。尝试在您选择的编辑器(记事本、写字板和Word、Eclipse)中使用Unicode字体,以便能够正确查看它们。字符通常显示在输入文件中。一旦我将其读入Java字符串并将该字符串写入输出文件,它们看起来就像特殊字符。我只想把它们原样写出来。不,是两个特殊的字符,破折号和省略号,在我把它们读入字符串后,它们很奇怪。然后我请你参考我在你的问题中的评论,我们不知道你在输入中使用的是什么类型的编码/格式。是的。我无法控制输入文件。稍后将发布。如何在此处附加文件?很抱歉,我找不到办法。@user1704891使用文件上传服务,将链接发布到您的问题上