Eclipse上导出应用程序后的不同字符

时间:2017-12-02 14:39:47

标签: java eclipse javafx

当我在Eclipse上运行我的应用程序时,我可以看到正确的拉丁字符,如下所示:

enter image description here

但是当我导出到runnable jar文件并执行它时,特殊字符是错误的,如下所示:

enter image description here

我不知道为什么会这样。在Mac上,Eclipse和.jar文件都可以。但是在Windows上它还不行。

我从网络服务器获取数据,然后在JavaFX ListView中显示。

1 个答案:

答案 0 :(得分:2)

这是一个转换为UTF-8字节的字符串,显示为某些Windows编码。

我猜你这样做了:

URL url = ...
BufferedReader in = new BufferedReader(
        new InputStreamReader(url.openStream());

你应该这样做:

URL url = ...
BufferedReader in = new BufferedReader(
        new InputStreamReader(url.openStream(),
                              StandardCharsets.UTF_8));

没有Charset的构造函数InputStreamReader将使用当前的默认平台编码 - 错误。

对于任何网址,您可以首先执行openConnection并尝试对提供的编码进行判断。策略有点间接:

  • connection.getContentEncoding()/ getContentType
  • 默认为ISO-8859-1
  • 当ISO-8859-1取代Windows-1252时,浏览器也会这样做

Java在String, char中保留Unicode,因此可以同时处理所有脚本。

二进制数据byte[], InputStream, OutputStream需要指定字符集/编码,必须从/转换为文本。