ShapeFileでUNICODEとかつかえますん。

ShapeFileの属性データはdBase形式のファイルに格納されています。このdBase形式って、互換性に問題があったり値のコードコンバージョンに難があったりしてちょと使いにくい。『古臭いdbfに足引っ張られるShapeFile形式がいつまでもデファクトスタンダードだからGISデータの国際流通が阻まれてるんだ』とか心にもなければ関心もないことを口走ってストレス解消する今日この頃。
実は、ArcGISUTF-8とかの属性値を持ったShapeファイルを扱える仕様があったりするんです。あんまり知られてないようですが。
dBaseファイルのヘッダ部にはデータの言語を明示するためのフィールドがあります。Language Driver ID (LDID)という1バイトのフィールドなんですが、ここに言語の種類をあらわす値を指定してやるだけでおk。ArcGISなどではこの仕様に対応しています。....のですが、インターネットなどでdBaseのファイルフォーマット仕様を検索してもLDIDの部分の詳しい説明が書かれている資料にはお目にかかったことがありません。私が唯一見つけられたのはESRIこの資料だけ。まぁそんな認知度の仕様なわけで、実際にこの仕様をインプリメントしたツールもArcGIS以外にはほとんど見たことがありません。

何はともあれ試してみます。ArcGISレジストリエントリにデフォルトコードページとしてCP932とか指定してShapeFile作るとちゃんとLDIDに値が入ります(・∀・)。ここで意気揚々とUTF-8を指定してShapeFile作ってみるわけですが....LDIDは0x00(未指定の意味)になっちゃいます(・А・)。dbfのLDIDの規格にUTF-8を表す値がないためLDIDには値を設定しないで、その代わりにShapeFileに*.CPGというファイルを添付してコードページを表現する仕様なんですね....。
まあそんな感じで今日の教訓は、便利そうだからといってマイナーな仕様に飛びついても何もいいことはありません、ということ*1。誰も使わない仕様なんて存在しないのと同義っっていうかなんでも自動化しなくていいんちゃうかと。
# 今日も後ろ向きなシメ。

*1:SharpMapやMsSqlSpatialはこの仕様による言語の自動判断に対応していますが、正直どうかと思います