• ベストアンサー

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

  • byte型をstring型として扱うには

    今日の質問/マイページに反映されないので、再度の質問です。 windows2000-sp4/vb6-sp5環境です。ユニコードのデータをvbで直接入出力し、vb内でstring型で扱いたいとおもっています。今のところ、vbの入出力では、自動的にsjis/unicode変換がされるので、binaryで受け取り、string型にするのかなと思っています。byte型で受け取り、APIの"MoveMemory"("RtlMoveMemory")でstring型にcopyするのかなとは思っているのですが、うまくいきません。経験不足そのものです。vbでのbyte型とstring型双方向のbinaryな変換の方法をお教えください。

  • 【Ruby】shift-jisのページの置換

    content="text/html; charset=shift-jis"のページを読み込んで、文字列の置換がしたいです。 #!/opt/local/bin/ruby require 'uri' require 'open-uri' url='http://hoge.hoge' open(url,'r:shift_jis'){|io| content = io.read content.gsub!(/ほげ/,'ホゲホゲ) print content } 上記の様に書いてみました。ソースコード自体はUTF-8で記述しました。 実行すると、 `gsub!': incompatible encoding regexp match (UTF-8 regexp with Shift_JIS string) (Encoding::CompatibilityError) となってしまいます。 どうしたらよいのでしょうか? rubyのバージョンは ruby 2.0.0p353 (2013-11-22 revision 43784) [x86_64-darwin12] です。 以上、よろしくご指導のほど、お願い申し上げます。

    • ベストアンサー
    • Ruby
  • 「C#」文字コードの取得&文字変換

    C#で文字コードを調べるプログラムを作成しています。 そこで2つ質問をさせてください。 1つ目(文字コード調べ) TextBoxに漢字を入力して,各エンコーディングの文字コードを調べるときに,UNICDEの場合, Encoding enc_default = Encoding.GetEncoding(932); string input = tb_input.Text; byte[] byte_input = enc_default.GetBytes(input); string outtext_unicode = ""; Encoding enc_unicode = Encoding.Unicode; byte[] byte_unicode = Encoding.Convert(enc_default,enc_unicode, byte_input); foreach (byte b in byte_unicode) { outtext_unicode += string.Format("{0:X}", (int)b); } tb_output_unicode.Text = outtext_unicode; とすると,調べたい文字コードがLE(リトルエディアン)で出力されます。これをBE(ビッグエディアン)で出力されるにはどうしたらよいでしょうか? ご存知の方がいらっしゃいましたら,ぜひ教えてください。 よろしくお願いいたします。 2つ目(文字コードから文字を取得する) 上記の質問と逆のパターンで,TextBoxに文字コードを入力してもらい,人間が読める文字に変換する場合下記のようなコードを書くと, string codePoint_string = tb_output_unicode.Text; int codePoint = int.Parse(codePoint_string); char c = (char)codePoint; tb_input.Text = Convert.ToString(c); ASCIIの文字コードを入力した場合には,きちんと変換してくれるのですが,漢字の文字コードを入力すると,FormatExceptionが発生します。 何か勘違いをしているのかもしれませんが,いまいちやり方が創造できません。 こちらも,ご存知の方がいらっしゃいましたら,ご教示願います。

  • javaバイナリ変換したデータのファイル出力

    現在、 String test_st = "0123456789abcdef"; というデータを byte[] bytes = test_st.getBytes("UTF-8"); このコードでバイナリ変換したのですが、このbytesに格納したバイナリデータたバイナリファイルとして出力したいのですが、どのようにしたらよいかご教授よろしくお願い致します。 BinaryFileWriter writer = new BinaryFileWriter(); このようなコードで出力できるとのサンプルもあったのですが、うまくいきません。 どうぞ、よろしくお願い致します。

    • ベストアンサー
    • Java
  • 文字化け(Shift-jis→UTF-8変換)で困ってます。

    フォームから送信されたShift-jisの文字列をUTF-8に変換して、ImageTTFText関数を使用して画像として表示させようとしているのですが、文字化けをしてしまって困っています。 入出力はShift-jisで、内部処理はUTF-8で行いたくて色々実験してみたのですが、どうにもうまくいきません。 以下にソース・環境を載せますので、どなたか、間違いをご指摘いただけないでしょうか? なるべくPHP.iniの設定は変えないで対処したいです。 どうか、よろしくお願いいたします。 【サーバのPHP.iniの設定(PHP ver.4.3.9)】 mbstring.detect_order = auto mbstring.encoding_translation = off mbstring.http_input = auto mbstring.http_output = SJIS mbstring.internal_encoding = EUC-JP mbstring.language = Japanese 【使用しているソース】 <?php mb_language("ja"); mb_internal_encoding("UTF-8"); mb_http_input("SJIS"); mb_http_output("SJIS"); // 表示する文字列 $str = mb_convert_encoding($_GET["txt"], "UTF-8", "SJIS"); // 画像サイズ define ( IMGWID, 300 ); define ( IMGHEI, 300 ); // フォントサイズ define ( FONTSIZE, 20 ); // 文字のスタート位置 define ( START_X, 10 ); define ( START_Y, 50 ); // 生成画像 $img = imagecreatetruecolor ( IMGWID, IMGHEI ); // フォント色 $fntc = ImageColorAllocate ( $img, 255, 255, 255 ); // 使用するフォント define ( FONTTYPE, '../font/DFKaiE.ttf' ); // フォントパスの設定 putenv ( 'GDFONTPATH='.realpath('.') ); $x = START_X; $y = START_Y; // 入力された文字を書き出し ImageTTFText ( $img, FONTSIZE, 0, $x, $y , $fntc, FONTTYPE, $str ); header ( "Content-type: image/jpeg" ); ImageJpeg ( $img ); ImageDestroy ( $img ); ?>

    • 締切済み
    • PHP
  • javaの文字コードについて

    いつもお世話になっております。 webで入れられた文字列に全角が含まれるか判定したいのですが、 文字コードについて質問させてください。 javaは標準では、String型は標準ではunicodeだと思うのですが、 これはutf-8なのでしょうか。utf-16なのでしょうか。 試しに以下のように"A"の文字をbyteに変換してみたところ、 String strTest = "A"; byte[] bbb = strTest.getBytes(); for(int i = 0 ; i < bbb.length ; i++){ System.out.println(bbb[i]); } "65"という結果が返ってきました。 http://ash.jp/code/unitbl1.htm 等文字コード表を見ると、"A"は"41"と定義されており、なぜ"65"が返ってくるのでしょうか。 変な質問ですいません。 関係無いと思いますが、ソースはS-JIS、windwos環境で実行しています。 よろしくお願いします。

    • ベストアンサー
    • Java
  • VB2005 で encoding="Shift_JIS"や"EUC-JP"のXMLファイルを保存する方法

    VB2005, XML の初心者です。 VB2005で encoding="Shift_JIS" や "EUC-JP" のXMLデータをファイルに保存するにはどうすれば良いのでしょうか。 encoding="UTF-8"であれば、下記で保存できますが、="Shift_JIS" や "EUC-JP" になると保存でエラーになってしまいます。 下記ソースでは、strXMLには正しくXMLが入っていますが、saveするとエラーになり、ファイルの中身を確認すると、日本語の箇所で切れていました。 Public Client As TcpClient Dim stream As NetworkStream stream = Client.GetStream() Dim Data(10000) As Byte Dim len As Int16 = stream.Read(Data, 0, Data.Length) strXML = System.Text.Encoding.UTF8.GetString(Data, 0, len) MsxmlDoc = New MSXML2.DOMDocument Msxmldoc.Loadxml(strXML) MsxmlDoc.save ( "C:\XML.xml") 文字コードについても初心者ですので、ヒントになるようなことでも教えていただければ幸いです。 よろしくお願い致します。

    • ベストアンサー
    • XML
  • VB(VBA)で、バイナリデータを使ってテキストファイルを作成したいの

    VB(VBA)で、バイナリデータを使ってテキストファイルを作成したいのですが、 例えば、"A"が一文字のみのShift-JIS もしくはunicodeのテキストファイルを作るため、 (下記の確認はShift-jis で行っています。) Dim ByteData As Byte ByteData = AscW("A") Open "C:\A.txt" For Binary Access Write As #1 Put #1, 1, ByteData Close #1 としました。 できあがったファイルをバイナリエディタで確認すると、  41 となっています。 (Unicode は 41 00 2バイト文字でリトルエンディアンのため) この41は、"A" の文字コード(Shift-JIS)「65」の16進表記です。 この「41」という値を使ってバイナリモードでテキストファイルを作成したいのですが、 どのようにすればよいでしょうか? 上記 Put #1, 1, ByteData の部分を、 1.Put #1, 1, 41 としたところ、通常表示はできないファイルができあがったみたいです。 バイナリモードで 「29 00 20 20」でした。 文字コード00 に該当する文字がないためだと思います。 2.Put #1, 1, "41" としたところ、「41 」(バイナリモードで 「34 31 20 20」) (41の後ろは半角空白) で×でした。 3.Put #1, 1, CLng("&H" & 41) としたところ、通常表示はできないファイルができあがったみたいです。 バイナリモードで 「41 00 00 00」でした。 4.ByteData = CLng("&H" & 41) Put #1, 1, ByteData これでやっとできました。 この他にも方法があるのか?と思い、質問させていただきました。 ご指導よろしくお願いいたします。

  • JAVAでUTF-8N以外が使えない

    Linux(CentOS4.2)にJ2SE v 1.4.2_10 SDKをインストールし,パスを通してさっそくハローワールドを作りました. すると,システム標準の文字コード(UTF-8)で書いた時には日本語が含まれていても問題なくコンパイルされ,実行できるんですが, Shit-JISやEUC-JPで書くと変換ができないと怒られ,コンパイルができません. 同じような質問が見当たらないのでその部分で躓く事がおかしいと思うんですが,このようになる原因はどのような事が考えられるでしょうか. コードは以下の物で,「てすと」の部分を「test」にすれば問題は起こりません. public class hello { public static void main(String[] args) { System.out.println("てすと"); } } エラーは以下のような物です > 警告: この文字は、エンコーディング UTF8 にマップできません。 ご存知の方がいらっしゃいましたらどうか宜しくお願いできましたら幸いです. (疎いのでおかしな質問かもしれません……)

    • ベストアンサー
    • Java
  • JAVA 文字コード変換

    こんにちは。 JAVAの文字コード変換のところで教えて頂きたい所があります。 はしご高(髙)  の文字をUTF-8からJISコードに変換してテキストファイルに書き込んでいるのですが、文字化けして"?"という文字になっています。 "髙"の文字をUTF-8からJISコードに変換の仕方のコーディング方法を教えて頂けないでしょうか。 現在下記の様に変換を行って書き込んでいます。  String str = "髙";  byte[] buf = str.substring(0, 1).getBytes("JIS0208"); OS:WindowsXP DB:Oracle10g  宜しくお願い致しますm(__)m

    • ベストアンサー
    • Java