2

ウムラウトを含むファイル名であるJavaの文字列があります。ファイルは Win 7 Pro ディスクに正しく保存されます (ウムラウトなどはエクスプローラーのファイル リストに正しく表示されます)。ファイル名をテキストファイルに保存しようとしたところ、ファイル名がウムラウト付きで正しく出力されました。しかし、ファイルからメソッド exists() を使用すると、ファイルが存在しないと表示されます。メソッド createNewFile() を使用しようとすると、ä.txt (元は ä.txt) のようなファイルが作成されます。ここでの設定で何が間違っている可能性がありますか? Tomcat 6 と Eclipse を使用して Web アプリケーションを実行しています。

4

1 に答える 1

2

ファイル名がソースコードに静的定数として含まれている場合、コードが実行されている場所に違いはありませんが、リモートアドレスからファイル名を読み取るときに、大きな違いがあります。

デフォルトでは、Windowsのデフォルトの文字セットとしてのすべてのJavaインスタンスは、通常「Cp1252」であり、他のシステムでは通常「UTF-8」です。したがって、ネットワークまたはファイルシステムとの間で文字列を読み書きするすべてのメソッドは、デフォルトの文字セットが使用されます。ただし、文字セットが明示的に指定されているメソッドバージョンを使用しない場合に限ります。

したがって、ファイル名をファイルに書き込むことは、それが正しく表示されるかどうかは、それを書き込むJavaプログラムではなく、使用しているテキストエディタに依存するため、すべてを示すわけではありません。

結論:コードを確認し、文字セットを明示的に設定していることを確認してください。これはgetBytes()、Stringのメソッドや、Reader/WriterインスタンスがInputStream/OutpuStreamに接続されているすべての場所に特に関係します。

于 2012-06-08T09:42:16.107 に答える