Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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_Encoding - Fatal编程技术网

写入文件时的java编码问题

写入文件时的java编码问题,java,file,encoding,Java,File,Encoding,我正在创建一个非常简单的应用程序,它从一个文件中读取一些输入,然后用这些信息生成另一个文件。我在Windows7上运行它,它运行起来没有问题,但当我在Mac OS上运行它时,特殊字符并没有正确显示 这是我的密码: Writer writer = new BufferedWriter( new OutputStreamWriter( new FileOutputStream(destiny),"utf-8")); writer.write(infoFromInputFile

我正在创建一个非常简单的应用程序,它从一个文件中读取一些输入,然后用这些信息生成另一个文件。我在Windows7上运行它,它运行起来没有问题,但当我在Mac OS上运行它时,特殊字符并没有正确显示

这是我的密码:

Writer writer = new BufferedWriter(
    new OutputStreamWriter(
        new FileOutputStream(destiny),"utf-8"));
writer.write(infoFromInputFile);
writer.close();
我用UTF-8编码声明我的FileOutputStream,当我检查创建的文件属性时,它说它是UTF-8格式的,但是像?、á、é、í等特殊字符显示错误


知道为什么会发生这种情况吗?

您是如何检查输出文件的?可能是您打开它时使用的编辑器,或是您将其转储到控制台时使用的命令(或控制台本身),错误地呈现了文件的内容?(也就是说,可能文件是正确的,并且您检查它时假设它不是UTF-8。)

或者,您是否确定以正确的编码打开了输入文件(可能使用的是
读取器
?)

您需要检查一些事项:

  • 首先,我建议在关闭Writer之前在Writer上调用
    flush()

  • 原始文件(输入文件)的实际编码是什么?输入文件是否有两种不同的编码(一种在Windows上,另一种在Mac上)?或者相同(可能两个都是UTF-8)?我猜默认编码(Java假设的编码,如果你不告诉读者的话)在Windows和Mac上(甚至在不同版本之间)可能不同

  • 当您读取输入文件时,您是以什么编码方式打开的?(这应该与上面的内容相匹配)

  • 在处理文件时,您是否在输入和输出之间做了任何可能引入奇数字符的操作?(例如,对Unicode值进行算术运算。)

    • 我找到了解决办法。 Mac对.java文件使用了不同于Windows和Linux的编码(我已经尝试过了,并且工作得很好)。要使用UTF-8编码创建文件,必须使用以下选项运行程序:

      java-Dfile.encoding=UTF-8 YourJavaClass


      谢谢您的帮助。

      什么是
      infoFromInputFile
      ?它来自哪里?您的终端是否支持显示您提到的字符?infoFromInputFile是一个带有特殊字符的字符串。我把它打印在控制台上,并正确地显示出来。请不要转述重要信息,如“特殊字符,如…”。复制/粘贴以准确显示您看到的内容,最好是在代码块中(缩进4个空格),并告诉我们您在何处/如何显示数据。很可能输出实际上是正确的,并且显示数据的任何内容都不支持UTF-8.Hmm。当你说“当我检查创建的文件属性时”,你说的“属性”到底是什么意思?好的,这就是我读取文件类的方式:
      private ArrayList openFile(String file)抛出IOException{ArrayList content=new arrarylist();BufferedReader br=new BufferedReader(new FileReader(file));String line=br.readLine();while(line!=null){content.add(line);line=br.readLine();}br.close();返回内容;}}}