2009.06.20 Saturday
マップファイル(Mapfile)Label ENCODING
担当業務から離れてしまい、MapServerをいじる機会がほぼなくなってしまい、ここの更新も止まっています。
離れる直前に悩んだいたのが、標記の件です。
結論としては、Windows環境下で、Shift-JIS形式で文字を扱うとき、
ENCODING="CP932"
を利用すると、幸せであるということです。
MapServerの国際化の中で、先輩方のご尽力で日本語環境も扱えるようになったのですが、このときのドキュメント類を探すことができませんでした。
下記URLで表示されるページが唯一の手がかりと思っていましたが、現在は、関連する情報が表示されません。
http://www.foss4g.org/FOSS4G/MAPSERVER/mpsnf-i18n-en.html
Windows環境下の利用において、ラベルで日本語表示をする時は、
http://mapserver.org/mapfile/label.html
等を参考にすると、
のように記述し、SJIS,UTF-8,EUCなどの指定をするのが一般的です。
ただ、Windowsの場合、俗にいうローマ数字の2バイト文字や(株)などの、いわゆる機種依存文字が上記の指定では、UTF-8でのみ表示できます。
SJISで指定すると対応するコードがないと判断され文字化けしてしまいます。
UTF-8で統一すれば?というご指摘がもっともですが、なかなかそうも行かない状況が
でてきます。
Windows上では、Shapefileのdbfや、MapInfoのDATなどは、Shift-JISで記述されています。
むりやりdbfをUTF-8化することも可能ですが、データの再利用性など弊害が多くなります。
データに関しては、Shift-JISのものはShift-JISのまま、UTF-8はUTF-8のままとして、ラベルだけを文字化けなく表示させたい。
ただ、日本人は、○に1や全角のローマ数字などの機種依存文字ををデータの中の値として利用することに、抵抗がなく、いちいちこれを修正するのはたいへんです。
ソースを深く追求していないのですが、MapServer上では、文字のコード変換をiconvライブラリが変換していると思われます。
iconvを使って、UTF-8をSJISにした場合、機種依存文字があると、文字化けを起こすことがあります。iconvのコードページ拡張などがされているものが、リリースされていたりなどからもこの問題が認識されていることがわかります。
4ヶ月も悩んだあげく、だめもとで、ENCODING に指定できる、SJIS,UTF-8,EUC のところに、CP932 と入れてみたら、いままでの悩みがいっぺんに解消されました。
この機種依存文字は、NECによる拡張やIBMの拡張があり、内容については、
下記ページ等を参照していただきたいのですが、同じ文字でも2つコードがあったりと、
日本語の文字に関しては多くの議論がされているようです。
http://ja.wikipedia.org/wiki/Microsoftコードページ932
Windows環境下での利用も増えつつあるよう思えるので、日本語をラベル表示することがある方は、是非試してみてください。
離れる直前に悩んだいたのが、標記の件です。
結論としては、Windows環境下で、Shift-JIS形式で文字を扱うとき、
ENCODING="CP932"
を利用すると、幸せであるということです。
MapServerの国際化の中で、先輩方のご尽力で日本語環境も扱えるようになったのですが、このときのドキュメント類を探すことができませんでした。
下記URLで表示されるページが唯一の手がかりと思っていましたが、現在は、関連する情報が表示されません。
http://www.foss4g.org/FOSS4G/MAPSERVER/mpsnf-i18n-en.html
Windows環境下の利用において、ラベルで日本語表示をする時は、
http://mapserver.org/mapfile/label.html
等を参考にすると、
LABEL
...
ENCODING "SJIS"
...
END
のように記述し、SJIS,UTF-8,EUCなどの指定をするのが一般的です。
ただ、Windowsの場合、俗にいうローマ数字の2バイト文字や(株)などの、いわゆる機種依存文字が上記の指定では、UTF-8でのみ表示できます。
SJISで指定すると対応するコードがないと判断され文字化けしてしまいます。
UTF-8で統一すれば?というご指摘がもっともですが、なかなかそうも行かない状況が
でてきます。
Windows上では、Shapefileのdbfや、MapInfoのDATなどは、Shift-JISで記述されています。
むりやりdbfをUTF-8化することも可能ですが、データの再利用性など弊害が多くなります。
データに関しては、Shift-JISのものはShift-JISのまま、UTF-8はUTF-8のままとして、ラベルだけを文字化けなく表示させたい。
ただ、日本人は、○に1や全角のローマ数字などの機種依存文字ををデータの中の値として利用することに、抵抗がなく、いちいちこれを修正するのはたいへんです。
ソースを深く追求していないのですが、MapServer上では、文字のコード変換をiconvライブラリが変換していると思われます。
iconvを使って、UTF-8をSJISにした場合、機種依存文字があると、文字化けを起こすことがあります。iconvのコードページ拡張などがされているものが、リリースされていたりなどからもこの問題が認識されていることがわかります。
4ヶ月も悩んだあげく、だめもとで、ENCODING に指定できる、SJIS,UTF-8,EUC のところに、CP932 と入れてみたら、いままでの悩みがいっぺんに解消されました。
この機種依存文字は、NECによる拡張やIBMの拡張があり、内容については、
下記ページ等を参照していただきたいのですが、同じ文字でも2つコードがあったりと、
日本語の文字に関しては多くの議論がされているようです。
http://ja.wikipedia.org/wiki/Microsoftコードページ932
Windows環境下での利用も増えつつあるよう思えるので、日本語をラベル表示することがある方は、是非試してみてください。


