2012/10/03(水) [n年前の日記]
#1 [python] Python2.7でiniファイルの読み書きをしようとしてハマる
Python 2.7.3 + ConfigParser で、iniファイルの読み書きの実験をしていたのだけど。日本語文字列がどうにも書き込みできずにハマってしまった。
英数字だけなら、すんなりiniファイルへ書き込みが出来るのだけど。日本語文字列を ―― 例えば「MS ゴシック」なんて文字列を書き込もうとすると、以下のようなエラーが。
関連情報を検索しているうちに、気になるページに遭遇。
_Issue 11597: Can't get ConfigParser.write to write unicode strings - Python tracker
どうもよく分からないけど。
「ConfigParser? おいおい、随分古いモジュールの話を持ち出してきたな」
「Python 2.7 の ConfigParser は Unicode に対応してないし、対応させるつもりもないよ」
「jsonなら Unicode にも対応できるからそっち使ったら?」
「ConfigParser も、バックポートした版がどこかにあったらなんとかなるのかもしれないけどねえ」
みたいなやり取り、なのだろうか? 英語はさっぱり分からんので自信無いけど。
とりあえず、jsonならなんとかなりそう、という話っぽいので、試しにそちらで試してみたり。…すんなり保存・読み込みができた。ぎゃふん。
つまり、Python 2.7.x で日本語文字列を設定ファイル等に記録したいなら、ConfigParser 使って iniファイルに、なんて考えちゃいけないらしい。Python 3.x なら、話は違ってくるのかもしれないけど…。
以下は、iniファイルとして保存しようとしてエラーが出るダメソースの例。
_Pythonでiniファイルの読み書き ・ Gist
以下は、jsonファイルとして保存して上手くいったソースの例。
_Pythonでjsonファイルを読み書き ・ Gist
英数字だけなら、すんなりiniファイルへ書き込みが出来るのだけど。日本語文字列を ―― 例えば「MS ゴシック」なんて文字列を書き込もうとすると、以下のようなエラーが。
Traceback (most recent call last): File "C:\home\prg\python\test_pyqt\qt_fontdialog_ini.py", line 79, in showDialog self.write_ini_file(self.ini_path, self.ini) File "C:\home\prg\python\test_pyqt\qt_fontdialog_ini.py", line 140, in write_ini_file ini.write(f) File "C:\Python27\lib\ConfigParser.py", line 412, in write key = " = ".join((key, str(value).replace('\n', '\n\t'))) UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)色々実験してみたけれど、どうにも解決せず。書き込めたと思ったら、iniファイルの中が文字化けしちゃったりで。
関連情報を検索しているうちに、気になるページに遭遇。
_Issue 11597: Can't get ConfigParser.write to write unicode strings - Python tracker
どうもよく分からないけど。
「ConfigParser? おいおい、随分古いモジュールの話を持ち出してきたな」
「Python 2.7 の ConfigParser は Unicode に対応してないし、対応させるつもりもないよ」
「jsonなら Unicode にも対応できるからそっち使ったら?」
「ConfigParser も、バックポートした版がどこかにあったらなんとかなるのかもしれないけどねえ」
みたいなやり取り、なのだろうか? 英語はさっぱり分からんので自信無いけど。
とりあえず、jsonならなんとかなりそう、という話っぽいので、試しにそちらで試してみたり。…すんなり保存・読み込みができた。ぎゃふん。
つまり、Python 2.7.x で日本語文字列を設定ファイル等に記録したいなら、ConfigParser 使って iniファイルに、なんて考えちゃいけないらしい。Python 3.x なら、話は違ってくるのかもしれないけど…。
以下は、iniファイルとして保存しようとしてエラーが出るダメソースの例。
_Pythonでiniファイルの読み書き ・ Gist
以下は、jsonファイルとして保存して上手くいったソースの例。
_Pythonでjsonファイルを読み書き ・ Gist
[ ツッコむ ]
#2 [prog] パングラム
フォントサンプルを表示する際に、キツネが云々の文字列があったはずだよな…と思い出して検索してみたり。
どうやら、その手の文字列は、 _パングラム と呼ぶらしい。知らなかった…。 _The quick brown fox jumps over the lazy dog も例として Wikipedia に掲載されてた。
日本語版は、 _手習い歌 と呼ぶらしいが、眺めた感じ、英文と違ってほとんど種類が無いっぽい。まあ、利用場面がほとんどなさそうだもんな…。
どうやら、その手の文字列は、 _パングラム と呼ぶらしい。知らなかった…。 _The quick brown fox jumps over the lazy dog も例として Wikipedia に掲載されてた。
日本語版は、 _手習い歌 と呼ぶらしいが、眺めた感じ、英文と違ってほとんど種類が無いっぽい。まあ、利用場面がほとんどなさそうだもんな…。
[ ツッコむ ]
以上、1 日分です。