文字コードの容量について教えてください。
データベースに格納されるUTF-8の文字が半角カナで3バイト必要とされている理由とはどのような理由があるのでしょうか。
UCS2で全角日本語が2バイトに対して、半角カナが3バイトなのは気持ち悪く感じてしまうので、ざっくりと教えていただけませんか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
UCS-2 は ASCII でさえも2バイトで格納する必要があり、既存のプログラムとの相性が非常に悪いのです。ASCII であれば必ず上位バイトに 0x00 が格納され、端末等に表示すると画面が化けたりバイト列の長さを調べる API が 0 を返したりと問題が起きやすいのです。UCS-2 を扱いたいプログラムはそれが UCS-2 である事を知らないといけない訳です。
それに比べ UTF-8 は 0x00 から 0x7F の範囲内で ASCII コンパチブルです。UTF-8 ではこの利便性を確保する為にコードポイントの領域に従った符号化方式を取ります。
UCS-2 | 第一バイト | 第二バイト | 第三バイト | 第四バイト |
---|---|---|---|---|
0x0000~0x007F | 0AAAAAAA | |||
0x0080~0x07FF | 110AAAAA | 10BBBBBB | ||
0x0800~0xFFFF | 1110AAAA | 10BBBBBB | 10CCCCCC | |
0x10000~0x1FFFF | 11110DDD | 1110AAAA | 10BBBBBB | 10CCCCCC |
バイト列だと以下になります。
コードポイント | 第一バイト | 第二バイト | 第三バイト | 第四バイト |
---|---|---|---|---|
U+0000~U+007F | 00~7F | |||
U+0080~U+07FF | C2~DF | 80~BF | ||
U+0800~U+0FFF | E0 | A0~BF | 80~BF | |
U+1000~U+CFFF | E1~EC | 80~BF | 80~BF | |
U+D000~U+D7FF | ED | 80~9F | 80~BF | |
U+E000~U+FFFF | EE~EF | 80~BF | 80~BF | |
U+10000~U+3FFFF | F0 | 90~BF | 80~BF | 80~BF |
U+40000~U+FFFFF | F1~F3 | 80~BF | 80~BF | 80~BF |
U+100000~U+10FFFF | F4 | 80~8F | 80~BF | 80~BF |
これにより、ASCII 範囲内で互換性が生まれ、多くのプログラムが UCS-2 への移植という苦行を行わなくても良くなり、みんなハッピーになる訳です。この方式を考え出したのはベル研の Ken Thompson 氏と Rob Pike 氏なのですが、多くの開発者から絶賛されました。
で、なぜ日本語が3バイトなのかを説明しますと、UCS-2 で日本語と呼ばれる物は以下の物です。
字種 | 範囲 |
---|---|
漢字 | 0x4E00~0x9FA0 |
全角英数及びマーク | 0xFF01~0xFF5D |
全角記号 | 0xFFE3,0x818F |
半角カナ | 0xFF61~0xFF9F |
上の表に当てはめると何れも3バイトである事が確認頂けるかと思います。つまり UTF-8 は多言語を ASCII コンパチブルに扱う為に生まれた革命的な符号化方式なのです。
投稿2017/07/05 05:41
編集2017/07/05 05:44総合スコア5030
0
例えば、
安直には、Wikiみて、
UTF-8
https://ja.wikipedia.org/wiki/UTF-8
’
実際の処は、裏付けをとるためにだったり、Wiki嘘が無い?の
確認の為に、
ISO/IEC 10646:2014がダウンロード可能になっています
http://yanok.net/2014/09/isoiec-106462014-1.html
の様なサイトを参考にして、規格の一次資料を探して、読込みます。
投稿2017/07/05 05:36
総合スコア2030
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
Unicode の U+0800 ~ U+FFFF は UTF-8 では 3 バイトになります。詳しくは以下の記事を見てください。
UTF-8
https://ja.wikipedia.org/wiki/UTF-8
質問者さんの言う「半角カナ」は Halfwidth and Fullwidth Forms(U+FF00 ~ U+FFEF)に入っているはずで、それゆえ UTF-8 では 3 バイトになります。
半角カナ
https://ja.wikipedia.org/wiki/%E5%8D%8A%E8%A7%92%E3%82%AB%E3%83%8A
Windows PC なら付属の IME パッドを見ると半角カナその他の文字コードが分かります。
投稿2017/07/05 05:52
編集2017/07/05 05:54退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/05 06:20
2017/07/05 07:10 編集
2017/07/05 07:26
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/05 06:04
2017/07/05 06:21