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

OKI Miyuki oki @ hunes.co.jp
2012年 11月 11日 (日) 23:33:04 PST


沖です。

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%
---------------------------------------------------------------------------------------------------




More information about the OSGeoJapan-discuss mailing list