- 締切済み
Solaris9 + Java 日本語文字化け問題
現在Solaris9上で動く、Javaのファイルアップロードのアプリケーションを作成しています。 今、文字化けに悩まされていて、どなたかの知恵を拝借できればと思い、質問させていただきました。 問題となっているのは、日本語をファイル名に含むファイルについてです。 日本語をファイル名に含むファイルをブラウザからアップロードすると、日本語の部分が化けて「?」となってしまいます。 試しにdumpして、文字コードを確認してみたのですが、文字コード自体はちゃんと受け取ることができていました。 ただ、その文字を出力しようとすると、日本語の部分が「?」に化けてしまっています。 ファイルの中身自体は、バイナリーデータで書き込んでるので、ダウンロードしても問題なく見れるのですが、ブラウザから、アップロードしたファイルを参照したり、TeraTermなどの端末からlsコマンドで見ると日本語の部分が「?」になってしまっています。 文字コードが正しく渡ってきていることから、Java側の問題ではなく、日本語をファイル名に含むファイルを作成するときに、Solaris側でうまく書き込めていないのではと思い、このカテゴリーに質問させていただきました。 ちなみに、Java側からログファイルにSystemoutするときも、日本語の部分は「?」になってしまいます。 なにぶんSolarisを使うのが初めてなもので、どこをどう見たり設定すればよいのかわからず、途方にくれています。どなたか解決策をお持ちでしたら、ご教授願います。 環境 Solaris9 J2SDK1.4.2
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- takayuki_okazaki
- ベストアンサー率0% (0/0)
日本語文字列が ? になるのはJava側の問題と考えてほぼ間違いないと思います。 Javaは文字列を内部ではUnicodeに変換して保持しています。このため、読み込みの際にShift_JISのような別の文字コードをJavaがStringを作る前にUnicodeへ変換する処理が入ります。この際、対象の文字コードからUnicodeへ変換が失敗した文字列は ? (U+FFFD REPLACEMENT CHARACTER)に置き換えられます。(ちなみに普通の ? は U+003F) 一方Solarisのファイルシステムはその書き込み時にはもとの文字コードイメージのままファイル名がつけられ、特別変換は行われません。(なので、Shift_JISのファイル名とEUCのファイル名を同一ファイルシステムに混在させることも可能) 以上のことから、Java側とくに、アップロードモジュールのファイル名を切り出している部分に問題があると考えられます。
- Tacosan
- ベストアンサー率23% (3656/15482)
ls |cat とやると正常に見えるかもしれないとか, Java って Unicode (UTF-16) を使っていると思ったけど Solaris 9 のファイルシステムはどうだっけなとか思ったり.