以前 http://q.hatena.ne.jp/1216284427 にて質問させていただいたのですが,

同様なプログラムをjavaで実装したいと思っております.

具体的には以下のように
文字コードを指定して,文字を出力したいと思っております.

char code = 0x3041; //現在utf-16で'あ'を指定
String str = code+"";
System.out.println(str);

現在utf-16での指定はうまくいくのですが,sjisで文字コードを指定する方法がわからず苦戦しております.


char code = 0x82A0;
と指定したら'あ'と表示できるようにするにはどうすればよいかご存知の方がいらっしゃいましたら教えていただけないでしょうか?
またjavaでの文字コードの扱いについて書かれているページなどがありましたら是非ご連絡くれないでしょうか?

よろしくお願いいたします.

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2008/08/04 22:49:06
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント50pt

Javaでは、マルチバイト文字は Unicode で扱うことが定められています。詳しいことは「Javaにおける文字/文字列の扱い方」をご覧ください。


したがって、JavaでシフトJISコードを扱うなら char 型より byte 型を用いるべきです。

Unicodeへの変換については「エンコード」を参考にしてください。


ただし、Microsoft標準の「Windows-31J文字」は完全には変換されません。

このあたりの事情は、「JSPで特殊文字が文字化けする場合の対処方法」や「JIS-Unicode間の変換表の選択について」が参考になります。

id:rockafeller

早速のご返答ありがとうございました.

javaの文字コードの扱いについて理解不足でした.

byte[] str_sjis = new byte[3];

str_sjis[0] = (byte)(0x82A0 & 0xff00 >> 8);

str_sjis[1] = (byte)(0x82A0 & 0x00ff);

str_sjis[2] = '\n';//0x00;

try {

 String str_uni = new String(str_sjis, "SJIS");

 System.out.println(str_uni);

} catch (UnsupportedEncodingException e) {

 e.printStackTrace();

}

としてみたのですが,文字化けが生じてしまいます.

なんども申し訳ないですが,具体的なコードはどのようになるかご連絡いただけると幸いです.

よろしくお願いいたします.

2008/08/02 20:58:44

その他の回答2件)

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633ここでベストアンサー

ポイント50pt

Javaでは、マルチバイト文字は Unicode で扱うことが定められています。詳しいことは「Javaにおける文字/文字列の扱い方」をご覧ください。


したがって、JavaでシフトJISコードを扱うなら char 型より byte 型を用いるべきです。

Unicodeへの変換については「エンコード」を参考にしてください。


ただし、Microsoft標準の「Windows-31J文字」は完全には変換されません。

このあたりの事情は、「JSPで特殊文字が文字化けする場合の対処方法」や「JIS-Unicode間の変換表の選択について」が参考になります。

id:rockafeller

早速のご返答ありがとうございました.

javaの文字コードの扱いについて理解不足でした.

byte[] str_sjis = new byte[3];

str_sjis[0] = (byte)(0x82A0 & 0xff00 >> 8);

str_sjis[1] = (byte)(0x82A0 & 0x00ff);

str_sjis[2] = '\n';//0x00;

try {

 String str_uni = new String(str_sjis, "SJIS");

 System.out.println(str_uni);

} catch (UnsupportedEncodingException e) {

 e.printStackTrace();

}

としてみたのですが,文字化けが生じてしまいます.

なんども申し訳ないですが,具体的なコードはどのようになるかご連絡いただけると幸いです.

よろしくお願いいたします.

2008/08/02 20:58:44
id:newta No.2

回答回数68ベストアンサー獲得回数7

ポイント50pt

Stringクラスの

String(byte[] bytes, String charsetName)

ではダメですか?

byte配列になりますが。

id:rockafeller

ご返答ありがとうございました.

上記のようにコードを書いてみましたが,理解不足のためうまくいっておりません.

何か参考になるコードをご存知でしたらご連絡いただければ非常に助かります.

よろしくお願いいたします.

2008/08/02 21:00:48
id:newta No.3

回答回数68ベストアンサー獲得回数7

ポイント50pt

#2です。

(0x82A0 & 0xff00 >> 8);

の行ですが、

& より >> のほうが優先度が高いため

先に0xff00 >> 8されています。

((0x82A0 & 0xff00) >> 8);

と括弧をつけてやれば

ちゃんと動きましたよー。

id:rockafeller

ご返答ありがとうございました.

初歩的なミスでした・・・

動作確認ができ無事解決しました!

本当に何度もありがとうございました

2008/08/03 07:27:16

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません