【问题标题】:Unicode in Jar resourcesJar 资源中的 Unicode
【发布时间】:2023-03-24 19:44:01
【问题描述】:

我在 jar 中有一个 Unicode(不带 BOM 的 UTF-8)文本文件,它作为资源加载。

URL resource = MyClass.class.getResource("datafile.csv");
InputStream stream = resource.openStream();
BufferedReader reader = new BufferedReader(
    new InputStreamReader(stream, Charset.forName("UTF-8")));

这在 Windows 上运行良好,但在 Linux 上似乎无法正确读取文件 - 重音字符出现损坏。我知道不同的机器可以有不同的默认字符集,但我给了它正确的字符集。为什么不使用它?

【问题讨论】:

  • 您如何确定角色是否损坏?例如System.out 坏了。
  • 数据以网页形式交付,以 UTF-8 编写。 HTTP 标头、XML 标头和 HTTP-equiv 元数据都表示 UTF-8,浏览器确认了这一点。

标签: java unicode utf-8 jar


【解决方案1】:

阅读部分看起来是正确的,我在 Linux 上一直使用它。

我怀疑您在将文本导出到网页时在某处使用了默认编码。由于 Linux 和 Windows 上的默认编码不同,您会看到不同的结果。

例如,如果您在 servlet 中执行此类操作,则使用默认编码,

PrintWriter out = response.getWriter();
out.println(text);

你需要像这样专门用UTF-8写,

 response.setContentType("text/html; charset=UTF-8");
 out = new PrintWriter(
    new OutputStreamWriter(response.getOutputStream(), "UTF-8"), true);
 out.println(text);

【讨论】:

    【解决方案2】:

    我想知道查看UTF-8 on Linux 是否会有所帮助。可能是设置问题。

    【讨论】:

    • 我正在指定解码方案,这意味着主机的设置将无关紧要。
    猜你喜欢
    • 2012-06-30
    • 2020-01-31
    • 2012-11-28
    • 2011-06-21
    • 1970-01-01
    • 2012-12-04
    • 2016-12-29
    • 2010-12-26
    相关资源
    最近更新 更多