文字コード雑感

真にワールドワイドな、移植性のあるプログラムを書く、というとUCS-4あたりにHan Unificationなんかせずに世界の全文字を詰め込んで、ラテン文字だろうと漢字だろうと4byteで済ませましょう、っつーのが平等かつ簡単だと思う。文字には文化も含まれているわけで、そういったニュアンスとか振る舞いの差異とかまで表すと、ある程度のbitを割かなきゃならないだろうし*1

もしくは全世界の言語を統一して2byteくらいで済むようにしましょう、だと思うんだが、政治的な問題に帰結させても絶対進展しなさそうなので却下。それ以前に各国の国語の先生からきつーいお叱りを受けると思うケド。

で、現在移植性のあるプログラムを書く上で障害となっているのが各処理系でのUnicodeや固定長文字の扱い方で。

Microsoftは内部表現にUTF-16を使ってる、という点で先見性がないというかケチケチしすぎというか。そもそもUTF-16は固定長文字ではないし、世界の文字を全て含めると(漢字の異体字を含めなくても)16bitじゃ足りないと思うんだけどな。とても中途半端な、選ばれた文字による国際化という印象。Shift_JISの例でいえば、ISO-2022非準拠や半角カナ問題、Windowsで使われている文字コードって実はWindows-31Jなんですよ、っていう前例とあわせて、問題のある常識を植え付けるのが十八番になってきてる感があるよなー…。

いいじゃん内部表現に4byteくらい使ったって。Unixでは4byte割いて実装しましょという風向きらしいし。入出力ではUS-ASCII互換のUTF-8を使うのが常識ぽくなってきてるし、ディスクスペースだって回線速度だってUTF-8で増えた分まかなうのもそんなに問題ないしょ(と、日本人が言うのは間違いか?*2 )。

それに将来、128bitとか256bitアーキテクチャでやりとりするようになるとchar型は32bitで扱いましょう。とかなるだろうし。そもそも現在でもcharcterの略でcharを最小単位の8bitにしましょう、というのは「文字なんかラテン文字しかねぇじゃん、8bitで済むダロ、HAHAHA」とかいうのを未だに引きずっているようでイタイ。

…こういうことを感じても何も言わないのがオトナなんだろうけども。

*1:とかいえるほど文化とかについてわかっちゃいないんだけど。

*2:まぁ実際UTF-8は「全世界での出現頻度でハフマン符号化しました」みたいで、むかつくんだけども(ぉ。