- ベストアンサー
javaでのshift_jis対応以外のunicodeの入出力
windows2000sp4 j2sdk1.4.2_05の環境です .netでは、直接unicodeでの入出力が行われるとか聞いているのですが、javaのFileInputReader/Writerで、encodingに、UTF-16 UTF-16LE UTF-8 等を指定して、入出力を行った時、どうも、s-jis対応外の文字は、"?"に変換されてしまうようで、FileInput/OutputStream を用い、バイナリで処理してみようとおもったのですが、byte型とString型(または、BufferString型)とのbinaryなデータのcopyがよく分かりません。何かご存知の方 お教え頂けないでしょうか
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>どうも、s-jis対応外の文字は、"?"に変換されてしまうようで、 これは、どうやって確認したのでしょうか? 確認の仕方が悪かった気がします。 ファイルが正常に作成されていても、シフトJIS用のソフトを使って確認したら、当然おかしな結果になります。 確実なのは、バイナリエディタで開いて確認してみることです。
その他の回答 (1)
- sha-girl
- ベストアンサー率52% (430/816)
単に画面出力の問題では? 例えばSystem.out.printlnでDOSプロンプトでハングル文字の出力はできませんし メモ帳で開く場合でもちゃんとUNICODEに対応した文字セットを指定しないと化けます。(ちなみにWordならない文字セットも補完されます) >binaryなデータのcopyがよく分かりません String型をバイト配列にエンコーディングすれば良いのでは? String a = "あああ"; byte buf[] = a.getBytes("UTF-16LE");
お礼
sha-girl様 回答ありがとうございます 使用文字セットとの関係が考えられますか! どうも、javaの場合は、エンコーディナグを、"UTF-16LE"と指定しても、入出力時、ダイレクトにunicodeでの入出力ではなく、間にプラットフォームであるwindowsのデフォルト文字セットであるshift-jisを仲介させての入出力のように思えるのですが。そのために、s-jisに対応しない文字が 0x003F"?"に置き換わる そんな印象なんですが 私は、どうもやることに時間がかかってしまうのですが、ご回答いただいたことを、これからためしてみます。 ありがとうございました。
お礼
ご挨拶が遅れてすみません s-jis以外のunicode文字をバイナリエディタで作成し、 javaのInputStreamReader/WriterでSringを介して入出力し、UTF-8/UTF-16とも、文字化けしないことを確認しました ありがとうございました どうも、前処理でTeraPadで入出力いてしまい、"?"に化けていたことに気づかなかったようです