DXR165の備忘録

自分用の備忘録です。

Unicode  

Unicode について(しかし、なんでこんなにややこしいのでしょう)。

Unicode とは世界中の文字を世界共通の「文字の集め方・収載のルール」として体系化したもののようです。

UTF-8 や UTF-16 はUnicode をコンピュータ内部でビット表現する際の方式。その際、ビットの並びを8ビットごとに区切り、16進数で表します。なぜ、複数の方式があるのでしょうか?1つでいいのでは!→いろんな事情があり、それぞれの特性で使い分けされているようです。

UTF-8 欧米圏ではASCIIと互換があり、導入しやすい。しかし、日本語などは1文字3バイト必要
UTF-16 プログラムが簡単で済むが、1文字に2バイト(もしくは4バイト)が必要

ということです。
しかし、混乱の元とのなっているのがWindows のメモ帳アプリの文字コードの選択肢です。

選択肢
ANSI
Unicode
Unicode big endian
UTF-8
となっています。

その本来の意味するところは、
ANSI→shift-JIS
Unicode→UTF-16 little endian(リトルエンディアン)
Unicode big endian→UTF-16 big endia(ビッグエンディアン)
UTF-8
となります。

big endia(ビッグエンディアン)とかlittle endian(リトルエンディアン)って?
2バイト以上の数値データを記録・読み出しするときには1バイト毎処理する。このとき、最上位のバイトから順に処理するのがビックで、最下位のバイトから順に処理するのがリトルとなります。
x86 アーキテクチャーのメモリ内部では複数バイトを記憶させる場合はリトルで格納されます。したがって、その値をメモリダンプなどで見るときは、バイト並びを逆(メモリ番地の小さい方から大きい方へ)から拾わないといけないようです。

 では、上記のメモ帳での文字コードのビックとかリトルは何を意味するのでしょうか?
メモ帳で入力した文字をファイルに保存するときに、UTF-16で1文字分のバイト並びをビッグエンディアンにするか、リトルエンディアンにするか指定できます。

メモ帳(Win 10 64bit版)で半角のAを各文字コードで保存し、バイナリエディタで保存データを表示してみました。

Unicode→UTF-16 little endian(リトルエンディアン)では
little.png 

Unicode big endian→UTF-16 big endia(ビッグエンディアン)では
big.png 

UTF-8 では
utf8.png 

となります。
半角のAのUTF-16は0041、UTF-8は41です。
EF FF や EF BB BF はBOMと呼ばれる特別なコードです。

UTF-8はエンディアンを考慮する必要はありません。





関連記事

category: PC-全般

tb: 0   cm: 0

コメント

コメントの投稿

Secret

トラックバック

トラックバックURL
→http://dxr165.blog.fc2.com/tb.php/327-437bc57d
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

最新コメント

カウンター(2012/3/10以降)