人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

以前 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での文字コードの扱いについて書かれているページなどがありましたら是非ご連絡くれないでしょうか?

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

●質問者: rockafeller
●カテゴリ:コンピュータ インターネット
✍キーワード:Char e+ Java Out SJIS
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● pahoo
●50ポイント ベストアンサー

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


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

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


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

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

◎質問者からの返答

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

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();

}

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

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

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


2 ● newta
●50ポイント

Stringクラスの

String(byte[] bytes, String charsetName)

ではダメですか?

byte配列になりますが。

◎質問者からの返答

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

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

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

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


3 ● newta
●50ポイント

#2です。

(0x82A0 & 0xff00 >> 8);

の行ですが、

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

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

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

と括弧をつけてやれば

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

◎質問者からの返答

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ