Ubuntu / Java / Glassfish中文件名字符编码问题奇怪

8
我有一个Java应用程序部署在Ubuntu Server Edition PC上的Glassfish web服务器上。
该应用程序必须提供的服务之一是在特定文件夹中挂载ISO镜像,并将此文件夹的所有内容复制到另一个目标位置。
由于我的Java方法发现了一个西里尔语文件名,所以它崩溃了。在服务器应用程序日志中,该文件名显示为“???????????????.txt”。
起初我认为这是一个Linux问题,因为此文件在终端中也显示不正确。在我添加CP1251区域设置后,Linux终端中的问题得到解决,但我的应用程序仍在抛出错误。
Ubuntu论坛上的一个人建议我使用“convmv”实用程序转换此糟糕的文件,但此实用程序的输出表明此文件已经是UTF-8。
之后,我创建了一个带有相同方法的测试应用程序,并在同一台PC上运行它,但只是像“java Test $arguments$”那样。
它确实有效!
简单的System.out.println方法正确显示了文件名,并成功将问题文件复制到另一个文件夹中。
这个事实让我别无选择,只能责怪Glassfish成为我课程、Java和Linux之间的鸿沟(尽管我不确定这是如何可能的)。
是否有任何字符编码特定设置在Glassfish中可以纠正此错误,或者我错过了什么,问题并不在那里?
提前致谢!
安德鲁

这可能是Glassfish中的安全漏洞吗?攻击者是否可以利用这个漏洞造成破坏? - Victor Stafusa - BozoNaCadeia
1个回答

1

尝试更改Charset.defaultCharset()。有关更多详细信息,请参见设置默认的Java字符编码?

此外,请查看Glassfish配置,例如

在sun-web.xml中,您必须看到类似于以下内容:

<locale-charset-info default-locale="">
<parameter-encoding default-charset="UTF-8"/>
</locale-charset-info>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接