在Solaris上使用Java的文件名中的口音

我在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?”的文件.

根据我在*上找到的信息,我尝试通过在启动时添加“ -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作为默认编码.

上一篇:仅监视新文件的目录


下一篇:Solaris-为什么java.lang.UNIXProcess.forkAndExec(本机方法)挂起