以前 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/01 18:34:00
  • 終了:2008/08/04 22:49:06

ベストアンサー

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/08/01 18:50:48

ポイント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

pahoo回答回数5960ベストアンサー獲得回数6332008/08/01 18:50:48ここでベストアンサー

ポイント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

newta回答回数68ベストアンサー獲得回数72008/08/01 21:36:01

ポイント50pt

Stringクラスの

String(byte[] bytes, String charsetName)

ではダメですか?

byte配列になりますが。

id:rockafeller

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

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

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

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

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

newta回答回数68ベストアンサー獲得回数72008/08/02 22:14:32

ポイント50pt

#2です。

(0x82A0 & 0xff00 >> 8);

の行ですが、

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

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

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

と括弧をつけてやれば

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

id:rockafeller

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

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

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

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

2008/08/03 07:27:16

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

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません