我在使用FileOutputStream时遇到文件名字符集问题。
我的代码非常简单,请使用
FileOutputStream
使用File
对象作为参数。
但在我的应用程序中,路径文件在System.out.println()
调用上打印正确。
但是在磁盘上,它是使用另一个字符集保存的(我不知道是什么)。
例如:在System.out.println
上,输出为:
C:\Folder\MyLatinNameWithÇorÃorAnotheLatinChar
但在实际磁盘文件名中,名称是:
C:\Folder\MyLatinNameWithçorãorAnotheLatinChar
发生了什么事?
对于noob问题感到抱歉,但我确实遇到了问题。
答案 0 :(得分:0)
System.out
不是很值得信赖。
最好直接检查字符串以查看它是否正确:
private static void debugPrint(String str) {
for (char ch : str.toCharArray()) {
if (ch < ' ' || ch > '~') {
System.out.format("\\u%04x", (int) ch);
} else {
System.out.print(ch);
}
}
}
它将打印可见ASCII范围之外的任何转义格式 - Ç变为\u007c
。然后,您可以针对BMP检查the charts值,以查看字符串中的内容。
这里的麻烦可能延伸到Windows中游戏中的字符编码数量:
除了Unicode之外的其他所有内容都已弃用,其他所有内容都是为了向后兼容性原因而闲置的,但却经常为不谨慎的人破坏数据。引入Java时,Unicode的采用并不普遍,ANSI default platform encodings在Windows上仍然存在。
检查system properties也是一个想法。有些devrlopers提供file.encoding
属性,但从默认值not supported更改它可能会对本机代码调用产生负面影响。