5

Pythonで非ASCII文字を印刷(またはファイルに書き込む)するときに問題が発生します。自分のオブジェクトのメソッドをオーバーライドし、そのstr中に「x.encode('utf-8')」を作成することで解決しました。ここで、xはオブジェクト内のプロパティです。

ただし、サードパーティのオブジェクトを受け取り、「str(object)」を作成し、このオブジェクトに非ASCII文字が含まれている場合、失敗します。

したがって、問題は次のとおりですstr。一般的に、オブジェクトにUTF-8コード化があることをメソッドに伝える方法はありますか?私はPython2.5.4を使用しています。

4

5 に答える 5

9

str()Python<3.0でUnicodeを使用する方法はありません。

repr(obj)の代わりに使用してくださいstr(obj)repr()結果をASCIIに変換し、ASCIIコード範囲にないものをすべて適切にエスケープします。

それ以外は、Unicodeを許可するファイルオブジェクトを使用してください。したがって、入力側ではなく出力側でエンコードします。

fileObj = codecs.open( "someFile", "w", "utf-8" )

これで、Unicode文字列をに書き込むことができfileObj、必要に応じて変換されます。で同じことを行うには、printラップする必要がありますsys.stdout

import sys, codecs, locale
print str(sys.stdout.encoding)
sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout)
line = u"\u0411\n"
print type(line), len(line)
sys.stdout.write(line)
print line
于 2009-11-10T11:05:28.390 に答える
3

クラスでメソッドを使用unicode(object)して定義するのはどうですか?__unicode__

そうすれば、そのユニコードがわかり、とにかくファイルにエンコードできます。

于 2009-11-10T10:51:40.493 に答える
3
none_ascii = '''
        ███╗   ███╗ ██████╗ ██╗   ██╗██╗███████╗███████╗ 
        ████╗ ████║██╔═══██╗██║   ██║██║██╔════╝██╔════╝ 
        ██╔████╔██║██║   ██║██║   ██║██║█████╗  ███████╗ 
        ██║╚██╔╝██║██║   ██║╚██╗ ██╔╝██║██╔══╝  ╚════██║ 
        ██║ ╚═╝ ██║╚██████╔╝ ╚████╔╝ ██║███████╗███████║ 
        ╚═╝     ╚═╝ ╚═════╝   ╚═══╝  ╚═╝╚══════╝╚══════╝ 
'''

print(none_ascii.decode('utf-8'))
于 2017-03-01T03:10:34.840 に答える
2

私はUnixシステムで解決策を見つけたと言いたいのですが、これで環境変数をエクスポートします:

エクスポートLC_CTYPE="es:ES.UTF-8"

このように、すべてのファイルはutf-8であるため、印刷などを行うことができ、正常に機能します。

于 2009-11-10T12:12:07.070 に答える
0

これらの2行をコードの先頭に貼り付けるだけです

  1. #!/ usr / local / bin / python
  2. #コーディング:latin-1

詳細については、このリンクにアクセスしてくださいhttps://www.python.org/dev/peps/pep-0263/

于 2015-05-02T20:20:49.223 に答える