プロが教えるわが家の防犯対策術!

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

A 回答 (2件)

>どうも、s-jis対応外の文字は、"?"に変換されてしまうようで、



これは、どうやって確認したのでしょうか?
確認の仕方が悪かった気がします。

ファイルが正常に作成されていても、シフトJIS用のソフトを使って確認したら、当然おかしな結果になります。

確実なのは、バイナリエディタで開いて確認してみることです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/09/14 09:02

単に画面出力の問題では?


例えばSystem.out.printlnでDOSプロンプトでハングル文字の出力はできませんし
メモ帳で開く場合でもちゃんとUNICODEに対応した文字セットを指定しないと化けます。(ちなみにWordならない文字セットも補完されます)

>binaryなデータのcopyがよく分かりません
String型をバイト配列にエンコーディングすれば良いのでは?
String a = "あああ";
byte buf[] = a.getBytes("UTF-16LE");
    • good
    • 0
この回答へのお礼

sha-girl様 回答ありがとうございます
使用文字セットとの関係が考えられますか!

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

ありがとうございました。

お礼日時:2004/09/10 14:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!