同様なプログラムをjavaで実装したいと思っております.
具体的には以下のように
文字コードを指定して,文字を出力したいと思っております.
char code = 0x3041; //現在utf-16で'あ'を指定
String str = code+"";
System.out.println(str);
現在utf-16での指定はうまくいくのですが,sjisで文字コードを指定する方法がわからず苦戦しております.
char code = 0x82A0;
と指定したら'あ'と表示できるようにするにはどうすればよいかご存知の方がいらっしゃいましたら教えていただけないでしょうか?
またjavaでの文字コードの扱いについて書かれているページなどがありましたら是非ご連絡くれないでしょうか?
よろしくお願いいたします.
Javaでは、マルチバイト文字は Unicode で扱うことが定められています。詳しいことは「Javaにおける文字/文字列の扱い方」をご覧ください。
したがって、JavaでシフトJISコードを扱うなら char 型より byte 型を用いるべきです。
Unicodeへの変換については「エンコード」を参考にしてください。
ただし、Microsoft標準の「Windows-31J文字」は完全には変換されません。
このあたりの事情は、「JSPで特殊文字が文字化けする場合の対処方法」や「JIS-Unicode間の変換表の選択について」が参考になります。
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();
}
としてみたのですが,文字化けが生じてしまいます.
なんども申し訳ないですが,具体的なコードはどのようになるかご連絡いただけると幸いです.
よろしくお願いいたします.
Stringクラスの
String(byte[] bytes, String charsetName)
ではダメですか?
byte配列になりますが。
ご返答ありがとうございました.
上記のようにコードを書いてみましたが,理解不足のためうまくいっておりません.
何か参考になるコードをご存知でしたらご連絡いただければ非常に助かります.
よろしくお願いいたします.
#2です。
(0x82A0 & 0xff00 >> 8);
の行ですが、
& より >> のほうが優先度が高いため
先に0xff00 >> 8されています。
((0x82A0 & 0xff00) >> 8);
と括弧をつけてやれば
ちゃんと動きましたよー。
ご返答ありがとうございました.
初歩的なミスでした・・・
動作確認ができ無事解決しました!
本当に何度もありがとうございました
早速のご返答ありがとうございました.
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();
}
としてみたのですが,文字化けが生じてしまいます.
なんども申し訳ないですが,具体的なコードはどのようになるかご連絡いただけると幸いです.
よろしくお願いいたします.