• ベストアンサー

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がよく分かりません。何かご存知の方 お教え頂けないでしょうか

質問者が選んだベストアンサー

  • ベストアンサー
  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.2

>どうも、s-jis対応外の文字は、"?"に変換されてしまうようで、 これは、どうやって確認したのでしょうか? 確認の仕方が悪かった気がします。 ファイルが正常に作成されていても、シフトJIS用のソフトを使って確認したら、当然おかしな結果になります。 確実なのは、バイナリエディタで開いて確認してみることです。

kttn
質問者

お礼

ご挨拶が遅れてすみません s-jis以外のunicode文字をバイナリエディタで作成し、 javaのInputStreamReader/WriterでSringを介して入出力し、UTF-8/UTF-16とも、文字化けしないことを確認しました ありがとうございました どうも、前処理でTeraPadで入出力いてしまい、"?"に化けていたことに気づかなかったようです

その他の回答 (1)

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

単に画面出力の問題では? 例えばSystem.out.printlnでDOSプロンプトでハングル文字の出力はできませんし メモ帳で開く場合でもちゃんとUNICODEに対応した文字セットを指定しないと化けます。(ちなみにWordならない文字セットも補完されます) >binaryなデータのcopyがよく分かりません String型をバイト配列にエンコーディングすれば良いのでは? String a = "あああ"; byte buf[] = a.getBytes("UTF-16LE");

kttn
質問者

お礼

sha-girl様 回答ありがとうございます 使用文字セットとの関係が考えられますか! どうも、javaの場合は、エンコーディナグを、"UTF-16LE"と指定しても、入出力時、ダイレクトにunicodeでの入出力ではなく、間にプラットフォームであるwindowsのデフォルト文字セットであるshift-jisを仲介させての入出力のように思えるのですが。そのために、s-jisに対応しない文字が 0x003F"?"に置き換わる  そんな印象なんですが  私は、どうもやることに時間がかかってしまうのですが、ご回答いただいたことを、これからためしてみます。 ありがとうございました。

関連するQ&A

専門家に質問してみよう