DOBON.NET DOBON.NETプログラミング掲示板過去ログ

日本語を含むstring型の文字列をbyte型の配列に変換したい

環境/言語:[Win2000, VC#.NET2003]
分類:[.NET]

初心者的質問で恐縮なのですが…

日本語を含むstring型の文字列を、byte型の配列に変換したいのですが、
うまくいきません。

日本語は2バイトなので
以下のような方法ではうまくいかない事は分かっているのですが、
その他の方法を知りません。
すみませんが、ご教授願います。

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

string strMsg = "あいうabc";
byte[] bMsg = new byte[strMsg.Length + 2];
for (int iCnt = 0; iCnt < strMsg.Length; iCnt++)
{
 bMsg[iCnt] = (byte)(Convert.ToChar(strMsg.Substring(iCnt, 1)));
}
> 日本語を含むstring型の文字列を、byte型の配列に変換したいのですが、
System.Text.EncodingクラスのGetBytesメソッドで変換できます。

> 日本語は2バイトなので
標準では UTF-8 になるので、漢字は3バイトだと思います。
# ロシア語などは2バイトですけど。
ありがとうございます!
急いでいたもので、早急な回答、大変感謝しています。

>>日本語は2バイトなので
> 標準では UTF-8 になるので、漢字は3バイトだと思います。
> # ロシア語などは2バイトですけど。

ええっ!?そうだったんですか?
知りませんでした。またひとつ知識が増えました。
ありがとうございました。
>>日本語は2バイトなので
> 標準では UTF-8 になるので、漢字は3バイトだと思います。

UTF-8 は入出力時の標準エンコーディングです。

文字・文字列の内部形式は UCS2 なので、漢字であろうとアルファベットであろうと1文字2バイトです。
こんにちわ。
後になって、こちらのサイトの.NET Tipsってところに
私の質問に対するズバリ回答が載っていたので、ちょっと反省していました。

渋木宏明様。
ありがとうございます。
文字コードの話しになると正直、
ASCII,Shift-JIS,Unicode,EUC,EBSDICぐらいしか馴染みありません。

UTF-8って確かUnicodeと同義語だったはず。と思っていたのですが…
UCS2って言うのもあるんですか?

漢字の場合は、内部処理中は2バイト、ファイルに書き出したら3バイトになる。
と考えててほぼ間違いないのでしょうか???
> UTF-8 は入出力時の標準エンコーディングです。
失礼しました。たしかにそのようですね。
勉強不足が露呈してしまいました。(^^;


> 文字・文字列の内部形式は UCS2 なので、漢字であろうとアルファベットであろうと1文字2バイトです。
これって、UTF-16 では無いのでしょうか?

.NET Framework では、サロゲートペアもサポートされているのですよね。
[UTF-16] ≒ [UCS-2] + [サロゲート] という認識でいたのですが……。

手元の資料が、Unicode 3.0当時の物だけなので、最近の定義については、
よくわかっていません……。(やっぱり勉強不足だ)
>>文字・文字列の内部形式は UCS2 なので、漢字であろうとアルファベットであろうと1文字2バイトです。
> これって、UTF-16 では無いのでしょうか?
>
> .NET Framework では、サロゲートペアもサポートされているのですよね。
> [UTF-16] ≒ [UCS-2] + [サロゲート] という認識でいたのですが……。

サロゲートペアに対応してたんですね (^^;

.NET Framework での Unicode
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconunicode.asp

にもはっきり、「UTF-16」って書いてあるし。
世の中全部UTF-16になればいいのに・・・
UTF-16じゃやっぱだめな気もしますが・・・
難しいですよねーこの問題は・・・
> UTF-8って確かUnicodeと同義語だったはず。と思っていたのですが…
> UCS2って言うのもあるんですか?

UTF と UCS の違いは↓のページなんかを参照してください。

http://homepage1.nifty.com/nomenclator/unicode/ucs_utf.htm

ざっくり言うと、UCS が文字集合を規定するもので、UTF は UCS で定義された文字をバイト列として表現する場合の約束ごとです。

> 漢字の場合は、内部処理中は2バイト、ファイルに書き出したら3バイトになる。
> と考えててほぼ間違いないのでしょうか???

Encoding 次第なんで、機械的にそう覚えてしまうのは危険な気も。
魔界の仮面弁士様
渋木宏明(ひどり)様
中博俊様

いろいろなご意見ありがとうございました。
難しくてまだほとんど理解できていない状態ですが、勉強します。

「世の中全部UTF-16になればいいのに・・・」って、同感です。
でもASCIIコードは個人的に好きなのでなくなって欲しくないとも思います。
好みの問題ではないとは思いますが…。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板