我遇到一个问题,我无法在 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/