【问题标题】:Unicode characters turning to question marksUnicode 字符变成问号
【发布时间】:2014-02-01 03:03:51
【问题描述】:

在我的生产级应用程序中,我正在处理一些与 unicode 字符相关的问题,例如中文/日文字符串。

我的应用程序有一个启动程序和一个配置文件,它设置了运行 jvm 可以使用的所有参数。此配置文件作为命令行参数的一部分传递。

有问题的用例是,我需要传递一个配置文件(名称-值对格式的内容)。此配置文件的名称中包含 unicode 字符(即中文)。当我从命令提示符运行应用程序时。我传递了完整的配置文件路径,当我复制时文件的名称看起来像“????.conf”。当我在我的代码中收到文件时,它的格式仍然是“some/path/and/????.conf”。最终,当我通过文件运行此路径时,检查是否失败,即 new File(path).isFile();

所以我创建了一个小程序来测试这个场景,该程序的工作是将文件路径作为命令行参数的一部分,打印它并读取该文件的内容。在运行之前,它看起来与上面类似,即“some/path/and/????.conf”,当它运行并打印位置时,它仍然相同,即“some/path/and/????。 conf”。但是当我调试它时,我能够看到正确的中文字符以及它能够读取文件及其内容。

所以我不确定我的主应用程序缺少什么/不同。我检查并尝试过的几件事是, 1. 通过命令 chcp 650001 将命令提示符的编码类型更改为 UTF-8。 2.设置java属性“-Dfile.encoding=UTF-8”。

但这也没有帮助。操作系统为windows 7,java版本为1.7.0.45。

关于在哪里查找以及为什么我的小程序中的类似代码有效而主应用程序无效的任何指针。

====== 一项更正是,作为命令提示符的一部分传递给 java 程序的文件是 xml 格式的。并将编码类型设置为 UTF-8,即通过“”。

所以同一个文件被传递给两个程序,在简单文件读取类的情况下它可以工作,而它不能用于主应用程序。与主应用不同的是,除了这个xml文件之外,还有其他参数传递。

谢谢,

维姬

【问题讨论】:

    标签: java unicode encoding utf-8 java-7


    【解决方案1】:

    检查 .conf 文件的编码类型。应该已经保存了 使用 UTF-8 编码。

    【讨论】:

    • 更新了描述。文件类型为 xml,并设置了 UTF-8。此外,相同的文件被传递给两个程序。
    • 你能显示读取文件的主应用程序的代码吗?
    • 我认为问题在于文件名包含非ASCII字符。
    • 是的,这就是问题所在。但是,同一个文件如何在我的简单测试程序中正常工作,但在我的应用程序中却不行。因此要消除任何与应用程序逻辑相关的影响。我将断点放在 main 方法的第一行,以检查传递的参数。所以在我的主应用程序中,它显示为???.conf,而在我的测试程序中,它显示了正确的文件名。
    猜你喜欢
    • 2011-03-23
    • 1970-01-01
    • 2023-03-13
    • 2012-05-05
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多