8 ビット文字セットの上半分の文字を含むテキストを返すxpdfプログラム pdfinfoを呼び出しsubprocess.popen()
ています。
結果を JSON シリアライザーに渡すと、文字\xae
(® 記号)になるとエラーが発生します。
>>> import json
>>> json.dumps({'a':'Adobe\xae'})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\app\python\2.7.3\lib\json\__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "c:\app\python\2.7.3\lib\json\encoder.py", line 201, in encode
chunks = self.iterencode(o, _one_shot=True)
File "c:\app\python\2.7.3\lib\json\encoder.py", line 264, in iterencode
return _iterencode(o, 0)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xae in position 5: invalid start byte
どうすればこれを修正できますか? コーデックと、Python がそれを処理する方法を理解するのに役立つ適切な情報を追加する場所について、私は完全に混乱しています。
編集:入力が私(または少なくとも私のソースコード)からのものであり、別のプロセスではない場合、Unicode文字列リテラルを使用できます
>>> json.dumps({'a':u'Adobe\u00ae'})
'{"a": "Adobe\\u00ae"}'
そしてPythonはそれをうまく処理します。
しかし、pdfinfo の出力を Unicode としてデコードするために Python に与えるヒントがわかりません。