【问题标题】:Encoding problems in Java FileJava 文件中的编码问题
【发布时间】:2012-06-12 07:34:18
【问题描述】:

我在 java 中有字符串,它是包含变音符号的文件名。文件正确存储在 Win 7 Pro 磁盘上(元音变音等正确显示在资源管理器文件列表中)。我还尝试将文件名保存到文本文件,然后使用变音符号正确输出文件名。但是当我使用 File 中的方法 exists() 时,它说文件不存在。如果我尝试使用方法 createNewFile(),它会创建像 ä.txt(最初是 ä.txt)这样的文件。我的设置可能有什么问题?我正在使用 Tomcat 6 和 Eclipse 来运行我的 Web 应用程序。

【问题讨论】:

  • Eclipse项目属性中的编码设置是什么?
  • 文件名是硬编码在你的代码中还是你从某个地方读到的?
  • @Robert 它是从 http 请求中读取的,但是如果我将该字符串写入文本文件,那么它会被正确打印,所以它不能与之相关。
  • @SoboLAN 我尝试了默认的 Cp1252 和 UTF-8 并没有解决我的问题。
  • 你是用属性 -Dfile.encoding=whatever 启动 java 吗?

标签: java character-encoding diacritics


【解决方案1】:

如果文件名作为静态常量包含在您的源代码中,那么执行代码的位置不会有所不同,但是当您从远程地址读取文件名时,它会产生显着差异。

默认情况下,每个 Java 实例都作为 Windows 上的默认字符集,这通常是“Cp1252”,在其他系统上通常是“UTF-8”。因此,从/向网络或文件系统读取或写入字符串的每个方法都使用默认字符集 - 只要您不使用明确指定字符集的方法版本。

因此,将文件名写入文件并不能说明一切,因为它是否正确显示取决于您使用的文本编辑器,而不是编写它的 Java 程序。

结论:检查您的代码并确保您明确设置了字符集。这与 String 的方法 getBytes() 以及您将 Reader/Writer 实例连接到 InputStream/OutpuStream 的每个地方尤其相关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-12
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多