Not only is the Internet dead, it's starting to smell really bad.:2006年08月26日分

2006/08/26(Sat)

Citrus iconv

@TODO 追加

  • fallback mappingの考慮
    fallback mappingってーのは、例えば:
    • GBKの0xA2E3は、今は通貨記号U+20ACが割り当てられてるが、昔はユーザ私用領域U+E76Cだった
    • 後方互換性を考えると、変換テーブルにはU+20AC → 0xA2E3だけでなくU+E76C → 0xA2E3も必要
    というようなものの事をいいます。
    しかしGBK → GB18030と建て増しを行う際に、U+E76Cはあらためて
    0x8336C739に割り当てられたので、esdbで
    NAME		"GB18030"
    ENCODING	"GBK2K"
    VARIABLE	"4byte"
    DEFCSID		"ISO646-US"	0
    DEFCSID		"GB2312"	1
    DEFCSID		"GBK"		2
    DEFCSID		"GB18030"	3
    
    のように書いちゃうとGBKのfallback mappingの方が先にに評価され
    0x8336C739ではなく0xA2E3に変換されてしまう、まあこれも
    NAME		"GB18030"
    ENCODING	"GBK2K"
    VARIABLE	"4byte"
    DEFCSID		"ISO646-US"	0
    DEFCSID		"GB18030"	3
    DEFCSID		"GBK"		2
    DEFCSID		"GB2312"	1
    
    と逆に書けば回避できるんだろうけど、あんまり美しくない気がする(性能劣化しかねないし)。
    fallback mappingな文字にはそれとわかる属性をつけておいて 遅延評価したほうがいいと思うんだな。