mieki256's diary



2012/10/03(水) [n年前の日記]

#1 [python] Python2.7でiniファイルの読み書きをしようとしてハマる

Python 2.7.3 + ConfigParser で、iniファイルの読み書きの実験をしていたのだけど。日本語文字列がどうにも書き込みできずにハマってしまった。

英数字だけなら、すんなり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 に掲載されてた。

日本語版は、 _手習い歌 と呼ぶらしいが、眺めた感じ、英文と違ってほとんど種類が無いっぽい。まあ、利用場面がほとんどなさそうだもんな…。

以上、1 日分です。

過去ログ表示

Prev - 2012/10 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project