java - 在 Solaris 上使用 Java 的文件名重音

标签 java solaris filenames diacritics

我遇到一个问题,我无法在 Solaris 上写入文件名中带有重音符号的文件。

给定以下代码

public static void main(String[] args) {
    System.out.println("Charset = "+ Charset.defaultCharset().toString());
    System.out.println("testéörtkuoë");
    FileWriter fw = null;
    try {
        fw  = new FileWriter("testéörtkuoë");
        fw.write("testéörtkuoëéörtkuoë");
        fw.close();

我得到以下输出

Charset = ISO-8859-1
test??rtkuo?

然后我得到一个名为“test??rtkuo?”的文件

根据我在 StackOverflow 上找到的信息,我尝试通过在启动时添加“-Dfile.encoding=UTF-8”来调用 Java 应用程序。 这将返回以下输出

Charset = UTF-8
testéörtkuoë

但是文件名还是“test??rtkuo?”

非常感谢任何帮助。

史蒂夫

最佳答案

所有这些字符都出现在 ISO-8859-1 中.我怀疑部分问题是代码编辑器以与您的操作系统使用的编码不同的编码保存文件。

如果编辑器使用的是 ISO-8859-1,我希望它将 ëéö 编码为:

eb e9 f6

如果编辑器使用的是 UTF-8,我希望它将 ëéö 编码为:

c3ab c3a9 c3b6

其他编码会产生不同的值。

如果您使用Unicode escape sequences,源文件会更便携.至少要确定您的编译器使用与编辑器相同的编码。

例子:

ë    \u00EB
é    \u00E9
ö    \u00F6

您可以使用 Unicode charts 查找这些值.

使用 -Dfile.encoding=UTF-8 更改默认文件编码可能会对 JVM 与系统的交互方式产生意想不到的后果。

此处与 problems you might see on Windows 有相似之处.

我无法直接重现问题 - 我的 OpenSolaris 版本使用 UTF-8 作为默认编码。

关于java - 在 Solaris 上使用 Java 的文件名重音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/773054/

相关文章:

java - 代码中的扫描仪错误,使用引用变量构建数组

linux - 我如何使文件内容作为命令的输出?

c - 如何在 Lex 和 Yacc (Solaris) 中使 YY_INPUT 指向字符串而不是标准输入

c# - 我应该用通用类定义命名我的文件?

Symfony VichUploaderBundle 重命名文件

sql-server - SQL Server 备份的动态文件名?

java - exploded war 目录是否有 Maven 属性?

java - throw 类 <?扩展可抛>

java - Java从XML文件中读取数据

c - 如何在 dbx 中的内存位置放置断点?