忍者ブログ

昔の話を残しておく。歴史ver.1

更新停止。コレ自体は残しておく。いわゆる、自分の歴史。

   

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

[プログラミング] 文字コードは何を使うべきなのか

覚書。

文字コード
プログラミングで用いる文字コード。日本国内ではUTF-8が強い。
単純な書類ではSHIFT_JISが一般。ただし、UTF-8もデフォルトで読めることが多いので、問題ない。

Unicodeは文字セットである。文字コードではない。
UTF-8は文字コードである。文字セットではない。
しかし、textpadでもsakuraでも、文字コードセットの項にUTF-8とUnicodeが共存している。
実に紛らわしいことだが、これらは、UnicodeをUTF-16の意味で用いているものだ。

文字セットというのは、そのまま、文字の集合体のことである。
文字コードというのは、エンコーディング方式のことである。
フォントというのは、採用している文字セットに対して、文字の見た目を提供するものである。

Unicodeは世界中の文字を表現するための規格だ。
空き領域の存在を考慮しても、すさまじい文字数である。

要するにUnicodeとは何なのか、というと、単なる「文字表」である。
文字を表形式で並べたものにすぎない。(実際には辞書型で定義されている)
(ちなみに、Unicodeの辞書リストに用いるキーのことをコードポイントという。)
だから、ハングル文字の領域がバージョンアップの時に民族大移動をしたりする。
しかし、これは飽くまで表である。
こんな文字のことを言うんだよ、と宣言している表にすぎない。
単なる表である以上、パソコンで扱うことはできない。パソコンは機械語しか読めないのだから。
そのために、Unicodeを符号化(パソコンで扱える状態にする)してやらなければいけない。
その符号化方式を示したのが文字コード。
ユーザーはメモ帳でぽちぽちと文字を打つ。これを保存するとき、特定の文字コードで保存される。
このファイルを他のパソコンへ持っていき、展開する。
この際、文字コードを読み取り、対応するUnicodeを表示するわけだ。
ちなみに、UTF-8の、UTFというのはUnicode Transformation Formatの略。
(UTF-8はUniversal multi-octet Character Set、通称UCSという名の文字セットでも使える。)
(なんで互換性があるのかまでは知らないが、現状、UTFはUnicodeTFまたはUcsTFの略称である。)
しかし、実際にはUnicodeがそのまま表示されるわけではない。
というのは、Unicodeは文字の定義を決めるだけで、見た目は決定しないからだ。
実際に表示されるのは、Unicode対応のフォント、ということになる。

順を追ってみてみよう。
あるテキストファイルがあったとして、これを表示するまでに何が起きているか。
1.ファイルデータを読み込む。
2.データの文字コードを識別する。
3.その文字コードに従って、データをUnicodeに戻す。
4.Unicodeの文字列データを作る。これは内部で処理され、体感することはできない。
5.テキストリーダー(textpad等)の設定から、フォントを識別する。
6.そのフォントに従って、Unicode文字列を順に画面上へと表示する。

どうせなら、メディアとなっているUnicodeを挟まずにUTF-8からいきなり変換できればいいのだが。
そうしないのには何か理由があるのかもしれない。
現状分かっていることは、Unicodeを挟むことで、
どの文字コードからでも、全てのフォントを利用できる、ということだ。(Unicode対応のみ)

長々と書いてあるが、もう一点押さえなければならない。らしい。
正規化表現、とか呼ばれるもの。

生物選択な人向けに話すので我慢して聞いて欲しい。
遺伝子からポリペプチドを形成するとき、塩基3つ組でアミノ酸を指定していたはずだ。
その対応表をさして、コドン表、という。しかしコドン表は、重複があっただろう。
塩基は4種類だから、3つ組で4の3乗=64ぱたーん。
対して、アミノ酸は20種。終止コドンを含めても21種にしかならない。
すなわち、平均して、1種につき3パターンの表し方が存在することになる。

こういった事情をUnicodeもはらんでいる。
一つの文字に対して、複数のキー(コードポイント)が割り当てられている。
しかも、コードポイント2つで一文字を表現するような変り種が沢山存在する。
なんでこうなってるのかは知らないが、とにかく、このままでは文字コードを解釈できない。
そこで、私は正規表現(1対1対応に新しく規格された表現法)を用います、と宣言する必要がある。

で、この正規表現、数種類あるらしい。ますます面倒な話だ。

なんだけども、あんまり意識しなくても正直、問題は普通起こらないとか。
いったいどういうことなんだろう。ごめん、そこまでは分からないや。







まとめ。

Unicodeは文字セットである。
UTF-8は文字コードである。
フォントは見た目を決定するものである。

正規表現を宣言しなければいけないらしい。けれど、それでエラーになったという話は少ない。
特定の関数(MultibyteToWideChar()など)でのみ考慮するべき事象のようだ。






結局、何を使うべきなのか?

おすすめの文字セットはUnicodeである。全世界対応は魅力的だ。
当然、文字コードはUTF-8,UTF-16,UTF-32あたりに限定される。

この3つの文字コードには特徴がある。
UTF-8……英数を扱う時、1バイトで扱える。しかし、日本語は3バイトになる。
UTF-16……英数も日本語も、2バイトで扱う。4バイト文字(UTF-8に含まれない)も扱える。
UTF-32……全てのUnicodeを同じバイト数で扱う。必然、データ量は巨大になる。

結論。

半角英数が多いならばUTF-8を使うべきで、
日本語とかの全角文字が多いならばUTF-16を使うべきである。

ただし、日本国内はデフォルトがSHIFT_JISであることが多い。
よって、他人に日本語パート(シナリオなど)を書いてもらう場合はSHIFT_JISを使おう。
UTF-16を用いているならば、その旨を相手に伝える責務がある。

普通にプログラムを組むときはUTF-8を使えばよさそうである。

拍手[0回]

PR

COMMENT

NAME
TITLE
MAIL(非公開)
URL
EMOJI
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
COMMENT
PASS(コメント編集に必須です)
SECRET
管理人のみ閲覧できます

TRACKBACK

Trackback URL:

プロフィール

HN:
mukasino
性別:
男性
職業:
学生
自己紹介:
「どうせ駄文」と言い訳するのは止めることにした。
最近気がついたことがある。どうやら俺は飽き性らしい。惰性が失われた瞬間に冷める。
もはや自己規律だけが頼りである。

ブログ内検索

カウンター

アクセス解析

Copyright ©  -- 昔の話を残しておく。歴史ver.1 --  All Rights Reserved
Design by CriCri / Photo by Geralt / powered by NINJA TOOLS / 忍者ブログ / [PR]