web-dev-qa-db-ja.com

PythonソースでのUTF-8エンコーディングの使用

$ cat bla.py 
u = unicode('d…')
s = u.encode('utf-8')
print s
$ python bla.py 
  File "bla.py", line 1
SyntaxError: Non-ASCII character '\xe2' in file bla.py on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

どうすればソースコードでutf-8文字列を宣言できますか?

384
Nullpoet

ソースヘッダでは次のように宣言できます。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
....

これは PEP 0263 に記述されています。

その後、文字列にUTF-8を使用できます。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

u = 'idzie wąż wąską dróżką'
uu = u.decode('utf8')
s = uu.encode('cp1250')
print(s)

UTF-8がデフォルトのソースエンコーディングであるため、この宣言はPython 3では必要ありません( PEP 3120 を参照)。

さらに、あなたのテキストエディタがあなたのコードをutf-8で正しくエンコードしていることを検証する価値があるかもしれません。そうでなければ、あなたはutf-8として解釈されない見えない文字を持っているかもしれません。

746
Michał Niklas

あなたのテキストエディタがutf-8であなたのコードを正しくエンコードしているかどうかを確認することを忘れないでください。そうでなければ、あなたはutf-8として解釈されない見えない文字を持っているかもしれません。

84
Ranaivo