これは私のコードです:
print '哈哈'.decode('gb2312').encode('utf-8')
...そしてそれは印刷します:
SyntaxError: Non-ASCII character '\xe5' in file D:\zjm_code\a.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
'哈哈'を印刷するにはどうすればよいですか?
更新:次のコードを使用する場合:
#!/usr/bin/python
# -*- coding: utf-8 -*-
print '哈哈'
... 鍝堝搱
を出力します。それは私が欲しかったものではありません。
私のIDEはUlipadですが、これはIDEのバグですか?
2回目の更新:
このコードは文字を正しく出力します:
#!/usr/bin/python
# -*- coding: utf-8 -*-
print u'哈哈'.encode('gb2312')
...そして私がこれを使うとき:
#!/usr/bin/python
# -*- coding: utf-8 -*-
a='哈哈'
print a.encode('gb2312')
Traceback (most recent call last):
File "D:\zjm_code\a.py", line 5, in <module>
print a.encode('gb2312')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)
...または...
#!/usr/bin/python
# -*- coding: utf-8 -*-
a='哈哈'
print unicode(a).encode('gb2312')
Traceback (most recent call last):
File "D:\zjm_code\a.py", line 5, in <module>
print unicode(a).encode('gb2312')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)
...それは機能しません。変数a
を適切に出力するにはどうすればよいですか?
ありがとう
エラーメッセージが非常に明確に示しているように、最初にエンコーディングを宣言する必要があります-詳細については ここ を確認するように指示されています!あなたのエンコーディングはおそらくgb2312
です。
ところで、(同じエンコーディング宣言を使用して)実行する方が簡単です
print u'哈哈'.encode('utf-8')
sys.stdout
にencode
属性が適切に設定されている場合(端末、OSなどによって異なります)、encoding
の部分も必要ない場合があります。
pythonソースコードファイルのエンコーディングを指定する必要があります。これがutf-8のコーディングです。右上のpythonインタプリタのパスの下にあります。
#!/usr/bin/python
# -*- coding: utf-8 -*-
エラーメッセージのURL に移動すると、pythonソースファイルのエンコーディングの指定に関する詳細情報を見つけることができます。
ソースファイルのエンコーディングを指定したら、テキストをデコードする必要はありません。
次のコードは私のために働きます:
# coding: utf8
print u'哈哈'.encode('utf-8')
#coding
コメントはPythonファイル自体のエンコーディングを示しているので、UTF-8文字を直接埋め込むことができます。Unicode文字列から開始する場合は、デコードする必要はありません。それを再エンコードします。
端末の文字エンコードを確認する必要があります。
私の端末では、最初に文字エンコードをutf-8に設定しましたが、すべて問題ありません。
GBKに設定すると、「鍝堝搱」になります。
Will McCutchenの回答に基づいて、これも機能します。
# coding: utf8
print '哈哈'
Unicode文字でエンコードすることはできません。エンコードは、Unicodeでエンコードされたすべての文字を他のコードスタイルに変換するために使用されます。文字のUnicodeには使用できません。
物議を醸す方法では、デコードは、Unicodeでエンコードされていない文字にのみ使用してUnicode文字に変換できます。
文字列の前に「u」文字を含む文字列を宣言すると、Unicodeでエンコードされた文字列が得られます。 isinstance(str、unicode)を使用して、strがユニコードでエンコードされているかどうかを検出できます。
以下のこのコードを試してください。ヒント:中国語版のWindowsでは、デフォルトのコードスタイルは「gbk」です。
>>> a = '哈哈'
>>> b = u '哈哈'
>>> isinstance(a、unicode)
誤り
>>> isinstance(b、unicode)
True>>> a
'\ xb9\xfe\xb9\xfe'
>>> b
u '\ u54c8\u54c8'>>> a.decode( 'gbk')
u '\ u54c8\u54c8'
>>> a_unicode = a.decode( 'gbk')
>>> a_unicode
u '\ u54c8\u54c8'>>>印刷a_unicode
哈哈
>>> a_unicode.encode( 'gbk')== a
True
>>> a_unicode == b
True>>> a.encode( 'gbk')
トレースバック(最後の最後の呼び出し):ファイル ""、行1、UnicodeDecodeError: 'ascii'コーデックは位置0のバイト0xb9をデコードできません:序数が範囲内にありません(128)>>> b.decode( 'gbk')
トレースバック(最後の最後の呼び出し):ファイル ""、行1、UnicodeEncodeError: 'ascii'コーデックは位置0-1の文字をエンコードできません:序数が範囲内にありません(128)