• 締切済み

文字コードを読み込み、文字として出力したい

はじめまして、よろしくお願いします。 ファイルに書かれた文字コードをJavaで読み込み、その文字コードに対応する文字を別のファイルに出力するプログラムの書き方を教えてください。 例えば"00a7"と書かれたファイルを読み込み、別ファイルに"ア"として表示させたいのです。 よろしくお願いします。

みんなの回答

  • ssr-y6
  • ベストアンサー率71% (5/7)
回答No.6

 シフトJISコードで小さいカタカナのァは2バイトの0x007Aではなく1バイトの0xA7です。 よって入力データの上位バイトが0の場合は下位バイトのみを書きこむようにすればよいと思います。 以下がそのサンプルです。 import java.io.*; public class charcode { public static void main(String args[]) { String s1[], s2[] = {"00a7", "00a8", "00a9", "00aa", "00ab", "82a0", "82a2", "82a4", "82a6", "82a8"}; int d[], i; try { s1 = args[0].split(","); d = new int[s1.length]; for (i = 0; i < s1.length; i ++) d[i] = Integer.parseInt(s1[i], 16); } catch (Exception e) { d = new int[s2.length]; for (i = 0; i < s2.length; i ++) d[i] = Integer.parseInt(s2[i], 16); }; try { FileOutputStream FOS = new FileOutputStream("test.txt"); for (i = 0; i < d.length; i ++) { if (d[i] < 0x100) FOS.write(d[i]); else { FOS.write((d[i] & 0xFF00) / 0x100); FOS.write(d[i] & 0xFF); }; }; FOS.close(); } catch (Exception e) { System.out.println(e.toString()); }; }; }

全文を見る
すると、全ての回答が全文表示されます。
noname#49428
noname#49428
回答No.5

うまくいってないという根拠は何ですか? 理想の結果と、現状を示して下さい。

全文を見る
すると、全ての回答が全文表示されます。
noname#49428
noname#49428
回答No.4

lowerとupperの値は何が入ってますか? Stringのコンストラクタで文字コードを指定しない場合は、プラットフォームのデフォルト文字セットを使うので、 リトルエンディアンとして認識したいのであれば、その旨を指定します。

takataka111
質問者

補足

現状以下のようにプログラムしているのですが、どうもうまく 行っていません。出力されたファイルをバイナリエディタで見ると うまく"A7 00"と出力されているようなのですが。 やり方がおかしいのでしょうか? ByteArrayOutputStream baos = new ByteArrayOutputStream(); String jnetcode = "00a7"; int high = Integer.parseInt(jnetcode.substring(0,2), 16); int low = Integer.parseInt(jnetcode.substring(2,4), 16); baos.write(high); baos.write(low); byte[] result = baos.toByteArray(); outStream.write(result[1]); outStream.write(result[0]);

全文を見る
すると、全ての回答が全文表示されます。
noname#49428
noname#49428
回答No.3

じゃあ、ヒントだけ。 16進数を、数値に変換するのは[ Integer#parseInt ]を使います。 バイト配列を、文字コードをしていしてStringにするには、Stringのコンストラクタを使います。 Javadocとにらめっこしてみて下さい。 考え方さえ分かれば、すぐに解けるはずです。

takataka111
質問者

補足

16進数の文字コードを10進数に変換することは出来ました。 これを文字にエンコードするためにバイト配列にしなくてはいけませんよね? この方法がよくわかりません。 以下のようにやってみたのですが、うまくいきませんでした。 何かヒントをいただけないでしょうか? よろしくお願いします。 byte[] unibuf = new byte[2]; byte lower = (byte) (10進数のlong型); byte upper = (byte) (10進数のlong型); unibuf[0] = (byte)upper ; unibuf[1] = (byte)lower ; // 書き込む os.print(new String(unibuf));

全文を見る
すると、全ての回答が全文表示されます。
noname#49428
noname#49428
回答No.2

00a7は、リトルエンディアンで"ア"になりますか??

takataka111
質問者

補足

補足いたします。 文字コードを文字に変換したいということを例で説明いたしました。 00a7が"ア"にはなりませんね^^; 文字コードが書かれたファイル(IN)を読み込んで、文字をファイル(OUT)出力させたいだけなのです。

全文を見る
すると、全ての回答が全文表示されます。
noname#49428
noname#49428
回答No.1

"00a7"="ア"になる文字コードは何ですか? 単純にするなら、文字コードと対応する文字をマッピングすればいいだけですが。

takataka111
質問者

補足

補足します。 00a7を0x00a7にしてリトルエンディアンにするのですが。。。 下記のソースの"0x00a7"の部分をファイルから読み込んだ文字列00a7 を元に動的に変えたいのです。 byte lower = (byte) (0x00a7 & 0xFF); わかりにくい説明でスミマセン。 また何かあれば補足いたします。 よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ■ 文字コードの出力について ■

    符号付char型の変数「moji」に文字を代入し、その文字コードの上位4ビットと下位4ビットをそれぞれAND演算でビットを抽出し、算術右4シフトと算術左4シフトで処理して元の上位4ビットと下位4ビットを入れ替えて文字コードを出力するC言語プログラムです。 例えば、「A」の文字コード「41」を「14」で出力します。 問題は「N」です。 「N」の文字コードは「4E」です。これを「E4」に変えて出力したいのですが、「ffffffe4」となってしまいます。 解決策は、符号無しchar型の変数にすることが分かりました。 なぜ、符号無しchar型の変数にしないと正常に表示できないのでしょうか? コンパイラは「Borland C++ Compiler 5.5」です。 お答えできる方、よろしくお願いいたします。

  • 内部文字コードとは?

    javaは内部では文字をユニコードとして扱うとは、 どういう事でしょうか? 例えば、javaのブログラムをwindows上で作ったとして、 「こんにちわ」と出力させるプログラムを作ったとすると、 public class Hello{ public static void main(String[] args) { System.out.println("こんにちわ"); } } となりますよね、この時、このjavaのソースファイルを、 ユニコードとして保存して、コンパイル、実行しないと、 正常に動かないという事でしょうか? つまり、ソースをシフトJISで保存してJAVAでコンパイルをしようとすると、ソースコード中の文字をユニコードとして扱うため、 文字化けして、コンパイラは一体何の事か分からずエラーみたいな感じになるのでしょうか?(それとも自動で文字コードをユニコードに変換してくれるのかな?) 要するに、「内部文字コード」という言葉が何を指しているのかが分からないですが、よろしくお願いします。

  • Flashから出力される文字コードは?

    お世話になります。 Flashの画面にて、入力したデータを他のプログラムに出力したいと思います。 その場合、文字コードは、何で出力されるのでしょうか? もしくは、指定できるのでしょうか? すみませんが教えてください。 よろしくお願いいたします。

  • 入力した文字列の文字コードを16進数で出力

    入力した文字列の文字コードを16進数で出力するプログラムを作っているのですが 下のように記述してもどうしても最後にaが表示されてしまいます。 打開策、または何故aが表示されるのかを教えてください。 #include <stdio.h> main() { int str; while(1){ str=getc(stdin); if(str==EOF) break; printf("%x ",str); } return 0; }

  • WindowsでEUCコードのファイルは出力できますか?

    Windowsのプログラム(VBなど)でEUCコードのファイルを出力することはできるのでしょうか? 出力するファイルに全角文字はありません。 プログラム以外の方法でも、簡単な方法があれば 教えて下さい。 よろしくお願い致します。

  • javaにおけるCSV出力時の文字コード改行コード

    JavaでCSVを出力する処理を作りました。 下記コードだとUnix環境で文字コードSJISで改行コードLFで出力されますが、 Windows環境でもUnix環境でも一律、文字コードSJISで改行コードCRLFで出力されるようにしたいです。 何かいい方法はありませんでしょうか。 なお、printlnで出力している行が多い為、 bw,Print("日付" + 変数A + \r\n); というふうに一行づつ変更するのは避けたいと思っております。 try{ PrintWriter bw = new PrintWriter(new BufferdWriter(new OutputStreamWriter(new FileOutputStream(/tmp/test.csv),"SJIS"))); bw.println("日付" + 変数A); bw.println("氏名" + 変数B); ・ ・ ・ }catch(Exception e){ // ログに出力 }

    • ベストアンサー
    • Java
  • サロゲートペアの文字コード→文字変換

    サロゲートペアの文字コード→文字変換 Windows上でRubyを使って文字コードの書かれたファイルを読み込んで文字を出力しようとしています。 サロゲートペアの文字コードを文字に変換するにはどうしたらいいでしょうか? たとえば上位サロゲートがa、下位サロゲートがbであるとき、JavaScriptでは次のようにすれば文字が得られるようです。 var s; s = String.fromCharCode(a,b); alert(s); (参考:http://codezine.jp/article/detail/1592) これをRubyでやろうとしていていろいろ調べてみたのですが、探し方が悪いのかわかりません。 どう書けばよいのか教えてください。 なお、WinsowsはXPです。ファイルに出力して正しく出力されているかどうかを確認しています。 よろしくお願いします。

    • ベストアンサー
    • Ruby
  • JavaScriptの文字コードについて

    テキストボックスに入力された文字の文字コードを表示させたいのですが、 /を入力すると、文字コードは191と出力されます。 /の文字コードは47だったと思うのですが。 文字コードを出力するソースは以下のようになっています。 //--押されたキ-コードを返す function getKEYCODE_A(){ alert("true" + event.keyCode) } これをinputタグのonKeyUp属性に指定しています。 なぜ/の文字コードが191となるのか分かる方がいましたら、 教えてください。 よろしくお願いします。

  • この文字コードは?

    大変お恥ずかしいレベルの質問です C#で印刷プログラムを作成しました プリンタ出口(注)で待ち構えて出力ログを取ったところ 半角文字の A ⇒ 0024 半角文字の J ⇒ 002D 半角文字の 1 ⇒ 0014 半角文字の 9 ⇒ 001C 全角文字の 印 ⇒ 0F33 全角文字の 験 ⇒ 3982 全角文字の に ⇒ 50D1 全角文字の る ⇒ 50F1 となって出力されています UNICODEやANSIであれば A は 0041 となると思いますが 0024 なのです これは如何なる種類の文字コードなのでしょうか? C#ですから当然UNICODEコードが使われていると思ったのですが・・・・・ 色々調べましたが分かりません 宜しくご指導お願い申し上げます (注)実際の印刷出力では ExtTextOutW API でプリンタに渡しています そこでこの ExteTextOutW API にフックを仕掛けてパラメータをダンプしたのです

  • ExcelVBAマクロでの文字コード出力について確

    ExcelVBAマクロでの文字コード出力について確認させてください。 ExcelでA列から行方向に漢字、記号(環境依存文字も含む)のデータが1文字ずつ入力されてあります。これをExcelVBAマクロにより、B列にShift_JISの文字コード、C列にJIS X 0213の文字コードに変換して表示することは可能でしょうか。 例えばIMEパッドで「亜」の文字コードはShift_JISでは"889F"、JIS X 0213では"1-16-1"ですがこの文字コードをB列、C列にそれぞれ表示させたいです。 またその他のいい方法があればご教授いただけますでしょうか。 以上、よろしくお願いいたします。

このQ&Aのポイント
  • NECのノートパソコン LAVIE N1575を購入し、再セットアップメディアの作成ができません。
  • エラーが表示されており、パーティションを手動で削除する必要がありますが、手動でパーティションを分けていないため困っています。
  • 同様の問題が交換してもらったPCでも発生しており、製造ロットやインストールされているソフトに問題がある可能性があります。解決法を教えていただきたいです。
回答を見る