Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.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中的UTF-8编码_Java_Encoding_Utf 8 - Fatal编程技术网

输出为java中的UTF-8编码

输出为java中的UTF-8编码,java,encoding,utf-8,Java,Encoding,Utf 8,我对使用eclipse的程序的输出文件有问题 System.getProperty("file.encoding") 我得到了UTF-8。我通过eclipse运行选项运行了我的程序,输出(文本文件)用UTF-8编码。但是当我将源代码压缩到jar文件中时,输出文件显示了一些字母表中的错误,如Ã。在eclipse和frm jar文件中运行prog时,这个差异是什么?我是否必须在源代码中指定要以utf-8编码的输出?请帮助 @dacwe的帮助确实产生了所需的输出。但是,我可以知道如何在命令行之外

我对使用eclipse的程序的输出文件有问题

 System.getProperty("file.encoding") 
我得到了UTF-8。我通过eclipse运行选项运行了我的程序,输出(文本文件)用UTF-8编码。但是当我将源代码压缩到jar文件中时,输出文件显示了一些字母表中的错误,如Ã。在eclipse和frm jar文件中运行prog时,这个差异是什么?我是否必须在源代码中指定要以utf-8编码的输出?请帮助

@dacwe的帮助确实产生了所需的输出。但是,我可以知道如何在命令行之外运行我的可执行.jar文件吗?-Dfile.encoding=UTF-8

@我试着把我的源代码改成

 BufferedWriter bout  = new java.io.BufferedWriter(new java.io.OutputStreamWriter(
                new java.io.FileOutputStream(filename), "UTF-8"));

但是输出仍然没有正确编码。这里有什么遗漏吗?

从JAR文件运行时,是否通过-Dfile.encoding设置file.encoding属性?如果没有,你也可以

a) 使用该编码显式打开流。为此,您必须创建一个OutputStream,然后将其包装在一个OutputStreamWriter中,明确指示字符编码

b) 使用System.setProperty(“file.endcoding”)将属性设置为主方法中的第一件事;


注意@dac我们指出了一些我忘记的东西。。。更正了我的答案。

在@Dave G的答案中进行了一些重要讨论之后

使用
java-Dfile.encoding=UTF-8-jar,您的jar文件.jar
可以工作

按照@Dave G的建议更新代码(以及您的编辑)应该可以

  • 你真的重新包装了你的罐子吗
  • 您是否在
    about
    上调用
    close()
    ?(例如,可能您的文件未更新)

下面是一个完整的示例,可以帮助您继续:

public static void main(String... args) throws Exception {
    PrintWriter out = new PrintWriter(new File("hello.txt"), "UTF-8");
    out.print("written in utf-8");
    out.close();
}

可能重复的,不要这样做!停止设置环境变量或系统属性以设置要使用的编码。Java中的所有相关类都有接受编码的构造函数。在那里指定正确的编码,您就再也不必依赖外部配置了。@dacwe我在源代码中没有提到System.setProperty(“file.encoding”,“UTF-8”)的任何用法。因此,通过eclipse运行我的代码总是会产生所需的结果(UTF-8编码文件)但不在.jar文件中。@reukEN11:这个问题的答案可能适用于任何情况?用
-Dfile.encoding=UTF8
.b)启动jar不正确。您必须在JVM启动之前设置
文件.encoding
(它由
String
OutputStreamWriter
缓存)。@dacwe我使用eclipse中的导出为.jar文件来压缩我的源代码。我如何准确设置此属性?我查看eclipse,它有.ini文件,在最后一行使用-Dfile.encoding=UTF-8(从教程中手动设置UTF中的ide)。@reukEN11:如果在程序中不使用源代码,则与源代码无关。使用以下命令从shell启动应用程序:
java-Dfile.encoding=UTF-8-jar您的jar文件.jar
@dacwe确实需要结果。当运行可执行jar时,这个-Dfile.encoding=UTF-8可以嵌入到jar文件中吗using@reukEN11:使用Dave G提供的答案。在构造
OutputStreamWriter
时,您提供了编码(第二个参数)。每次更改源代码后,我都会重新打包.jar文件,以确定输出以及bout.close()已添加。除了使用console外,其他都无法使用。我的BufferedWriter有什么问题?@reukEN11:您的
BufferedWriter
没有问题。我只想写一个简明的例子。如果读取文件,还需要使用正确的编码。@dacwei-see。因此,我确实更改了mybufferedwriter以专门包含字符集。重新打包并运行,但问题仍然存在。将继续尝试。