[OSGeoJapan-discuss] GDAL:コマンドライン・オプションと日本語文字化け

Mizutani Takayuki mizutani.takayuki @ gmail.com
2012年 11月 13日 (火) 17:40:42 PST


沖さま、皆様

はじめて投稿させていただきます。水谷と申します。
有益な情報ありがとうございます。

早速、--optfile のオプションを試してみたところ、
日本語ファイル名のshpファイル --> kmlの変換で文字化けが起きる問題が解消されましたので
ご報告させていただきます。

##0.属性名と属性に日本語を入れたshpファイルを"日本語.shp"という名前で用意しました。
shpファイルのエンコードはshift_jisです。

##1.テキストエディタで以下の内容のファイルをutf-8でtest.optという名前で保存しました。
-f kml 日本語.kml 日本語.shp

##2.OSGeo4Wで以下のコマンドを打ちました。(gdalのバージョンは1.9.2です。)
SET GDAL_FILENAME_IS_UTF8=YES
SET SHAPE_ENCODING=CP932
ogr2ogr --optfile bin\temp.opt

これで、文字化けなしのKMLを作成することができました。

文字化けしていた原因は、おそらく、、、
kmlは、shpファイルの属性値がすべてutf-8に変換されて書き込まれるのですが、
その際に、shpファイルの名前自体もkmlの中に書き込まれる部分があって、
そこだけは、UTF-8に変換しないで、そのまま書き込まれてしまうからのようです。
なので、optfileを利用して、あらかじめutf-8の日本語ファイル名にした状態でogr2ogrに
引数を渡すことによって解決できました。

上記方法を利用して、EXCELからshpファイルとkmlファイルを作成するプログラム(ポイントだけ)
を作ってみましたので、よろしければお試しください。

http://www.ecoris.co.jp/contents/excel2shp.zip

(データ変換で苦労しないよう、皆で情報共有できるといいですね〜)

以上です。

--
水谷貴行
mizutani.takayuki @ gmail.com

2012年11月12日 16:33 OKI Miyuki <oki @ hunes.co.jp>:
>
> 沖です。
>
> GDALで、日本語等の文字化け問題に関するパッチ送ってたら、
> 既にAkaginchさんが対処されてて、日本語で情報交換してたら、
> こんなに苦労しなかったのに…という事案が発生したので、
> 一応、ポストしときます。
>
>  ちなみに、Akaginchさん(赤木さんではないかと推察しているのですが)
> ありがとうございました。
>
>  一応、経緯を説明すると、Windows のコマンドライン環境では
>> chcp 65001
> みたいに、UTF-8 の文字コードを使えますよ的なコマンドが
> 存在するのですが、いざ、使ってみると、プログラムに渡された
> オプションの文字コードが勝手に変換されて、使いもんになるか
> おんどりゃーヽ(`Д´#)ノ
> な現実が待ってます。
>
>  で、これを回避するのに、やっぱ、それぞれの文字コードを
> 受けて UTF-8 に内部で変換してやるか、Base64 みたいに
> 文字化け関係無いエンコードで引数を受け渡すしか無いよなー?
> 的に考えておりました。せっかくパッチを送ってみたんですが、
> どうも
>
>   -optfile というオプションが追加されていて、
> 普通ならオプションをそのまま書くところを、オプションの
> 内容をテキストファイルにutf-8の文字コードに変換して書き出して、
> テキストファイルとして受け渡すというオプションが、追加されて
> おりました(今まで、全然気が付きませんでした)。
>
>  この手法の利点は、バッチファイルで文字コードの差異を
> 吸収できること。QGIS 等のプログラムからは、内部で UTF-8 を
> 使っていれば、オプションをそのままファイルに書き出して渡せば、
> いろんな言語が混ざっていても、正しく文字コードを扱える事
> が挙げられます。
>
>  あと、この辺の文字コード問題に関する対処方みたいなドキュメントが
> 不足していると思われるので、英語得意な方、是非チャレンジして
> 欲しいと思いました。
>
> --------------------------------------------------------------------------------------------------
> akaginchi さんから提示された、バッチファイル
> ===========================================================
> @echo off
> set temp_file=utf8.tmp
>
> for /f "delims=: tokens=2" %%a in ('chcp') do SET CP=%%a
> set local_encoding=CP%CP: =%
>
> set params=%2
> :loop
> shift /2
> if [%2]==[] goto loopend
> set params=%params% %2
> goto loop
> :loopend
>
> rem generate option file in UTF-8 and execute gdal command with optfile
> option
> echo %params% | iconv -f %local_encoding% -t UTF-8 > %temp_file%
> %1 --optfile %temp_file% 2>&1 | iconv -f UTF-8 -t %local_encoding%
> del %temp_file%
> ---------------------------------------------------------------------------------------------------
>
>
> _______________________________________________
> OSGeoJapan-discuss mailing list
> OSGeoJapan-discuss @ lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss


More information about the OSGeoJapan-discuss mailing list