The Man Who Fell From The Wrong Side Of The Sky:2008年9月14日分

[最新版] [一覧] [前月] [今月] [翌月]

2008/9/14(Sun)

[NetBSD] tech-userlevel

まだやってんのかUTF-8ネタ、しかも話がwsconsの方向に逸れててワロタ。

compiling-time locale問題、要するにeucJPロケールで起動したコンパイラは
ソース文字集合及び実行時文字集合をeucJPとして解釈してバイナリ吐く
というやつだけど、これだとsingle binaryでi18nを実現するのは
事実上不可能ちゅうことになってしまうのですよ。

だからPOSIX localeでは Portable Character Setちゅう概念を導入し
実行時文字集合はこのPCSとしてcompileし、setlocale(3)で
このPCSと互換性のある文字符号化手法(UTF-8やeucJP、ISO-2022-JPなど)
に切り替えることでsingle binaryによるi18nを実現してるわけでして。

先日書いた話で C/POSIX localeがISO646であることの理由はそれね。
だから--exec-charsetは勝手に変えちゃダメちゅーことで。
やるならsetlocale(3)含め、localeに影響される関数全て呼んじゃダメよ。

あと余談ですが、NetBSDはPCS=ISO646-BASICなので0x5C問題は無いゆえ
ja_JP.SJISロケールはOK(ISO646-BASICとShift_JISは互換)なのだけれども
(ただしSUSv3読むとPCSにはbackslashを含むとあるのが微妙...)
LinuxだとPCS=US-ASCIIなので、0x5C問題にひっかかるのでデフォルトではインスコされないし
localedef(1)でja_JP.SHIFT-JIS作ろうとするとわらわら警告でますな。

FreeBSDはPCS=US-ASCIIだけど、ja_JP.SJISロケールあるんだよな。
まぁなんも考えてないだけだとは思いますが。


[ホームへ] [ページトップへ]