Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java文件中的编码问题_Java_Character Encoding_Diacritics - Fatal编程技术网

Java文件中的编码问题

Java文件中的编码问题,java,character-encoding,diacritics,Java,Character Encoding,Diacritics,我有java中的字符串,它是包含umlauts的文件名。文件正确存储在Win 7 Pro磁盘上(umlauts等在资源管理器文件列表中正确显示)。我还尝试将文件名保存到文本文件中,然后使用umlauts正确输出文件名。但当我使用File中的exists()方法时,它表示File不存在。如果我尝试使用createNewFile()方法,它会创建类似于÷txt(最初为÷txt)的文件。我在这里的设置可能有什么问题?我正在使用Tomcat 6和Eclipse来运行我的web应用程序。如果文件名作为

我有java中的字符串,它是包含umlauts的文件名。文件正确存储在Win 7 Pro磁盘上(umlauts等在资源管理器文件列表中正确显示)。我还尝试将文件名保存到文本文件中,然后使用umlauts正确输出文件名。但当我使用File中的exists()方法时,它表示File不存在。如果我尝试使用createNewFile()方法,它会创建类似于÷txt(最初为÷txt)的文件。我在这里的设置可能有什么问题?我正在使用Tomcat 6和Eclipse来运行我的web应用程序。

如果文件名作为静态常量包含在源代码中,那么执行代码的位置将不会有什么不同,但是当您从远程地址读取文件名时,会有很大的不同

默认情况下,每个Java实例都是Windows上的默认字符集,这通常是“Cp1252”,在其他系统上通常是“UTF-8”。因此,在网络或文件系统中读取或写入字符串的每个方法都会使用默认字符集——只要您不使用显式指定字符集的方法版本

因此,将文件名写入文件并不能演示所有内容,因为它是否正确显示取决于您正在使用的文本编辑器,而不是编写它的Java程序


结论:检查代码并确保显式设置了字符集。这对于字符串的方法
getBytes()
,以及每个与InputStream/OutpuStream连接的读写器实例都特别相关。

Eclipse项目属性中的编码设置是什么?文件名是硬编码的还是从某处读取的?@Robert它是从http请求读取的,但是,如果我将该字符串写入文本文件,则该字符串被正确打印,因此它不能与该字符串相关。@SoboLAN我尝试了默认的Cp1252和UTF-8,但它没有解决我的问题。您是否使用property-Dfile.encoding=什么来启动java?