FC2ブログ

そんなnewsは犬も喰わない

犬も喰わないnewsの数々に斜め横からアレコレ

スポンサーサイト 

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ --/--/-- --:-- ] スポンサー広告 | トラックバック(-) | コメント(-)

日本語文字コード 

この間100円で買って来た本にわかりやすいマトメがあったのでメモ。unicodeが幅を利かす前の記述なのでUTF-8とかについての言及はないんですけどね。

ちなみにこの本は「よしだともこのルート訪問記―日本のオープンソース時代を築いてきた人たち」というものです。CD-ROM付きで、私が買った100円の古本にもちゃんとついてました(笑?)。

ええと、まだ少ししか読んでないんですけど、いいですよコレ。基本的には大学や研究所なんかのシステム管理者に苦労話をインタビューしてきました...みたいな内容なんですけど、特筆すべきは傍注ですかね。色々な計算機関連の用語がものすごく的確かつコンパクトに説明されてます。相当デキル人っぽいなー、と感じました。計算機関連の知識がすごく奥深い気配がします。
で、日本語コードの話はたぶんどうやっても傍注には収まりきらなかったようで、そういうのとは別に「UNIXまめちしき ISO2022」として書いてありました。

 ISO 2022とは、ISO(International Organization for Standardization: 国際標準化機構)が定めた規格で、「情報交換用符号の拡張法」の書かれたもの。この規格をそっくりそのまま日本語に訳したものが、日本規格協会(JIS)が発行している規格票のJIS X0202です。
 ここで「拡張」とは、制御文字集合と図形文字集合をそれぞれセットで取り換えることを意味します。ASCIIコード体系のように、扱う文字数が7ビットで表現できる範囲内におさまる場合には拡張の必要はないのですが、日本語や中国語をはじめとする多くの言語では、セットにした図形文字集合を取り換えながら使う必要があります。この取り換え方法を定めた規格がISO 2022です。これには拡張方法として、7ビットの領域だけで文字を表現する拡張方法として「7単位符号の拡張方法」と、8ビットの領域を使って文字を表現する拡張方法として「8単位符号の拡張方法」の2種類が定められています。
 この拡張方法のすべての決まり(フルセット)の一部を使って拡張しているのがJISコード(iso-2022-jp)と日本語版EUC(euc-japan)で、すべてではなく一部を使っていることから、これらのコードは、「ISO 2022(JIS X0202)のサブセット」といえます。JISコードが、「いわゆるJISコード」というように「いわゆる」という修飾語をつけて書かれることがあるのは、フルセットではなくサブセットだからです。
 また俗に「シフトJIS」と呼ばれているMS漢字コードは、「ISO 2022(JIS X0202)」の拡張方法とは違う方法で拡張されており、「ISO 2022」の中で制御文字集合を置くと定められた部分に図形文字集合を当てはめているなど、規格にはのっとっていないコード体系です。

えーと、要するに...ISO 2022に従って(枠内で)作られた文字コード体系がJISとEUCなんですね。両者の違いはなんだろう?ここみると「EUC自身は、日本語だけでなく複数の文字セットを同じテキスト内で処理することが可能です」というところが主な違いのようです。よくわからんですが。

こうしてみるとなんとなく「シフトJIS」が無法者っぽく見える(そしてそれなのにパソコン界に広く蔓延っちゃってヤーネー!という感じ)なんですけど、確かこのあたりすごく政治的なアレコレとかがあったらしいんですよね。「シフトJIS」が勝手なんじゃなくて、ISO 2022の方が勝手なんじゃねーの?っていうか。

EUCは上で引用したサイトに「EUC (Extended Unix Code) は日本語対応UNIXワークステーションで内部コードとして広く使われています」とあるようにUNIXで日本語を書くときなんかにも使われていることもあって正統派っぽい感じがするんですけど(←オイラだけか?)、たとえばHP-UXのような大型計算機で使われているUNIXの日本語コードは「シフトJIS」だったりします。

大体UNIXで半角カナが使えませんとかなんだとかいう話があったのって、「いわゆるJIS」コードがエスケープシーケンスなんつーものを使う規格だったせいですよね。つまり7単位符号にして8ビット目をエスケープシーケンスに当てているから8単位符号のシフトJISとぶつかるわけで。そんなもの規格が悪(ry

「シフトJIS」の問題点としては「文字セット切り替えがないので扱いも簡単というメリットがありますが、コードが分断されており体系として不自然なため漢字処理に一家言を持つ人の間では嫌われているようです」なんてのがあげられてますね。「体系として不自然」か。そんなのどーでもよくねー?そんなクダラナイ理由のために余分に二つも日本語文字コードつくっちゃってさ。そっちの方が不自然で無駄だっつーの!!「体系として不自然」でもなんでもそのまま突っ走っておけば日本語文字コードが一個だけっつー大メリットがあったわけじゃんか。バカかっつーの。

ところがですよ!そんな情況下にunicodeですよ。バカマキシマムですよ。っつーか、unicode自体はバカでも何でもないんですけど、UTF-8が大バカなわけですよ!とかいってるのにこのブログの文字コードはUTF-8なんすけどね!大矛盾だっつーの!

上記サイトに「Unicodeと漢字」についての記述がありますね。

 ここでは詳しい説明は省略しますが、この中に中国語、日本語、韓国語(頭文字を取ってCJKと称される)の漢字2万文字あまりを配置します。それに当たっては、各国で用いられている漢字コード(全部を合わせると12万以上になる)から重複するものや意味、構造が同じものを統合し、まとめていくHan Unificationという作業が行われました(これについては厳しい批判があります)。日本の文字コードとしてはJIS X 0208-1990とJIS X 0212-1990がサポートされます。
 ごく大まかに言えば、Unicodeにおける漢字の表現は、第1バイトを0x4E~0x9F(I領域)に割り当てたものです(第2バイトは 0x00~0xFFの全領域)。JISコードとの規則的な変換ルールは存在しないので、個々の文字を対応させる変換表が必要になります。
 Unicodeは16ビット固定なので、文字列の操作が単純になります(と宣伝されていますが、実際はいろいろ変則的なつぎはぎがあって、そうはいかないようです)。2.0では38,885文字が割り当てられ、これらのコードポイントは永久的なアドレスとして信頼すべきものと(Unicodeの主張では)されています。一方、Unicodeでは従来の文字コードで想定されていたソートが保証されません。

もうグダグダなわけで。Unicodeを16ビット固定にしていることがガンなんですよね。24ビットにすればまだなんとかなったのに...とはよく聞く話。ただアルファベット文化圏の連中には馬鹿げた主張に見えるんでしょうけどね。彼らは8ビットでも余裕だったくらいなんだから。

で、Unicodeが16ビットなせいで必然的に「重複するものや意味、構造が同じものを統合し、まとめていくHan Unificationという作業が行われました」という文化テロが粛々と進行されたわけです。でもこのことが全然世間では知られていないみたいで怖いですわ。「(これについては厳しい批判があります)」と補足してありますけど、この「厳しい批判」も学界の極一部からのものだけ、って印象だし。

日本と日本以外の漢字文化圏の漢字を統合するって話なわけですよ。アルファベット文化圏の連中からみたら大体同じに見えるし、みたいな感覚で。このあたりについてはTRONの坂村健先生も「痛快!コンピュータ学」で書いてましたよ(←そんな本から引用するなよ!←うるせーバカ!)。

しかし、違う文字を強引にまとめてしまっているために、せっかく全世界の統一文字コードができても、漢字を使う複数の言語が混在した文書、たとえば語学の教科書は作ることができなくなってしまいます。これでは何のための統一なのか分かりません。また、日本の私たちが中国や韓国のホームページをインターネットで読もうとしても、そこで表示されるのは、いわば「ウソ漢字」になるわけです。(略)ちなみに、このUnicodeの体系では英語のアルファベットは、8ビット時代の番号がそのまま適用されています。ですから英語用のソフトはほとんど修正なしでUnicodeに対応できます。これに対して、日本語の場合には従来の文字コードとUnicodeではまったく法則性がありません。(略)もちろん、日本の代表も国際会議の席上で反対意見を述べたのですが、結局、政治力で上回るアメリカ側に強引に押し切られ、これが国際標準として決められてしまったというわけです。そんないきさつで決まった基準ですから、いまだに日本国内にはUnicodeに対する根強い反対論があります。先年、中国でコンピュータ関係者たちと会ったときにも、この話が出て、やはり中国でもUnicodeが「熱烈歓迎」されているわけではないことを知りました。(pp.180-181)

ええと、この話は普通に16ビットのUnicodeが最悪だ...というものなわけです。今このブログで使っている文字コードはUTF-8なわけですけど、これってspell outすると8-bit UCS Transformation Formatとなるわけですよ。8は8ビットの8なわけで。ワケワカラン!

で、ちとググってみたらUnicodeについてIT用語辞典にこんな記述がありました。

Apple社、IBM社、Microsoft社など米国の情報関連企業が中心となって提唱し、1993年に国際標準化機構(ISO)でISO/IEC 10646の一部(UCS-2)として標準化された文字コード体系。
 すべての文字を16ビット(2バイト)で表現し、1つの文字コード体系で多国語処理を可能にしようとするもの。世界の主要な言語のほとんどの文字を収録している。
 2バイト表記では最大65536文字しか収録できないため、中国語・日本語・韓国語で同じ意味や同じルーツの漢字はすべて同じ文字とみなし、同じコードを割り当てる統合作業(ハンユニフィケーションと呼ばれる)が行われ、文化の違いを無視したものだとの反発を招いている。
 Unicodeは、最初の規格が策定された後にハングル文字の追加や異体字表現方式の策定が行われ、部分的に3バイト以上を使用する体系に変化している。このため、現在はUnicode全体は4バイトで定義(UCS-4)されている。

「16ビット(2バイト)」って書いているので1バイト=8ビットってことなんでしょう。つまりUCS-2っていうのがもともと規格した通りの16ビット固定バージョン。で、Han Unificationという池沼文化テロをやったのに結局足りねーとかいうことになって、部分的に3バイト(つまり24ビット)以上を使う変則的な体系になっとると。だからそういうモノを考慮して結局32ビット規格として定義されてUCS-4とかになっとると。バカだと。バカだということを見事に証明しきっていると。グダグダやんか。

UTF-8を同じところで調べて一部を引用

UTF-8では、Unicodeの最初の128文字(UCS-2でいうU+0000からU+007F)を変換した結果がASCIIとまったく同じになるため、従来の処理システムとの親和性が高いという特長がある。一方、日本語などの文字は元々2バイトだったものが3バイトや4バイトで表現されてしまうため、UTF-16と比べてデータサイズが大きくなってしまうという欠点がある。

つまりアルファベット文化圏(というか英語文化圏)には都合が良いけど、日本語環境では欠点のある不公平な文字コードっつーことですな。

あとHan Unificationについてもこんな風に書いてあります。一部抜粋。

厳密には字形が違う漢字も統合されているため、漢字を使う言語同士を同じフォントで混在させるとどちらかの言語で問題が発生する。特に日本人を中心に、文化を無視していると猛烈に批判された作業だが、その後CJKV統合漢字の異体字がUnicode 3.0で使用できるようになり、ハンユニフィケーションの弊害はある程度緩和されている。

批判は「日本人を中心に」と書いてますな。私が以前読んだ「いま日本語が危ない―文字コードの誤った国際化」にもそう書いてあったような。ええと、この本はタイトルが今イチちょっとアレな感じですけど、イイ加減な煽り本じゃなくてちゃんとした本です。あと中身の方でもちょっと筆者の怒りが全面に溢れすぎてて若干アレな面も否めないのですけどね。内容はきちんとしてますよ。

あー、上で引用した坂村先生は「中国でコンピュータ関係者たちと会ったときにも、この話が出て、やはり中国でもUnicodeが『熱烈歓迎』されているわけではないことを知りました」って書いているのでちょっとアレですけど、「熱烈歓迎」ではない理由について良く聞いてみると日本人とは全然違う理由かもしれないですからね。自国で使っている簡体字が優先されて他の漢字を駆逐できるように、と思って政治的意図で(日本の足引っ張ったりして)活動してたら案外それが通らなかった部分もあって...とか、あとなんだかんだでアメリカの言いなりになるのが嫌とかそういうことかもしれないし。

ま、長々書いちゃったので、ここらあたりで終わっときます。

あとメンテナンスとか色々の件ですが、パチっとは定めずにダラダラ並行してやりながら、色々徐々に変えながら...って感じでやっていくと思いますので、今後ともよろしく(←誰に語ってるんだよ!←うるせーバカ!)
スポンサーサイト
[ 2006/01/15 12:47 ] パソコン・インターネット | TB(0) | コメント(-)
プロフィール

犬桑主監

Author:犬桑主監
正式略称は「犬桑news」です。
気軽に呼んでください。

ブログ検索
総合案内

ブロとも申請フォーム


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。