- - PR -
"〜"をgetBytes()した時の結果について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-03-28 18:59
一件、質問させて頂きます。
下記、処理をLinux環境、Windows環境でそれぞれ実行したところ、 getBytes()後の配列要素数がそれぞれLinux環境⇒1、Windows環境⇒2となってしまいました。(2となってほしかったのですが。。。) 【処理】 String tmp = "〜"; byte tmpb[] = tmp.getBytes(); bytecounter = tmpb.length; ←この値が環境によって違う "〜"以外の全角文字は問題なく2となります。なぜ"〜"だけが、、、 ご存知の方いらっしゃいましたら、ご教示願います。 ちなみにLinux環境⇒EUCコード、Windows環境⇒S-JISコードです。 JavaはUnicodeで処理するので関係ないと思いますが。。。 以上、宜しくお願いします。 | ||||||||
|
投稿日時: 2008-03-28 20:02
JavaのAPI仕様書にgetBytes()は"プラットフォームのデフォルトの文字セットを使用して" と書いてあります。
ちなみに"〜".getBytes("EUC-JP")は3バイト,"〜".getBytes("SJIS")は1バイトです。 | ||||||||
|
投稿日時: 2008-03-28 20:07
getBytes()の戻り値は、現在のシステムの文字コードでデコードされます。
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/String.html#getBytes() 違う環境下で同じ結果が欲しいのであれば、明示的に指定する必要があります。
文字列(charの配列)自体はucs2というわれるコード体系になっていますが、 それをバイト列として扱う方法が文字コードによって違います。 簡単に言うと、 ・文字のコード体系がucs2 ・Javaでは1文字=nバイト ・nは文字コードにより不定 ということです。 | ||||||||
|
投稿日時: 2008-03-29 02:55
あれ? EUC-JP で1バイトになりますかね? 私の環境では以下のような結果になりました。
「〜」は確かに特別です。波ダッシュ#Unicodeに関する問題 を参照してください。 |
1