2


0

python unichr問題

サーバー上の `unichr()`に問題があります。 下記を参照してください:

私のサーバー(Ubuntu 9.04):

>>> print unichr(255)
Traceback (most recent call last):
  File "", line 1, in
UnicodeEncodeError: 'ascii' codec can't encode character u'\xff' in position 0: ordinal not in range(128)

私のデスクトップ(Ubuntu 9.10):

>>> print unichr(255)
ÿ

私はpythonがかなり新しいので、これを解決する方法がわかりません。 誰でも助けたいですか? ありがとう。

4 Answer


6


print」キーワードを使用すると、` sys.stdout`出力ストリームに書き込みます。 通常、 sys.stdout`は、文字が str(message) `を使用してASCIIに変換できる場合にのみUnicode文字列を表示できます。

これを行うには、印刷時にOSの端末エンコーディングにエンコードする必要があります。

`locale`モジュールは時々出力コンソールのエンコーディングを検出できます:

import locale
print unichr(0xff).encode(locale.getdefaultlocale()[1], 'replace')

しかし、Pythonがしばしば間違ってしまうので、通常は自分でエンコーディングを指定する方が良いでしょう:

print unichr(0xff).encode('latin-1', 'replace')

UTF-8またはlatin-1は、現代の多くのLinuxディストリビューションでよく使用されていると思います。

コンソールのエンコーディングがわかっている場合、「 print」を使用すると、以下の行でUnicode文字列が自動的にエンコードされます。

import sys
import codecs
sys.stdout = codecs.getwriter(ENCODING)(sys.stdout)

エンコードがasciiまたは類似のものである場合、OSのコンソールエンコードを変更して、その文字を表示できるようにする必要があります。

参照:http://wiki.python.org/moin/PrintFails


2


サーバーの端末設定は異なりますが、おそらく7ビットUS ASCIIに設定されています。


2


それは実際には「unichr()」に関連していません。 問題は、サーバー環境のロケール設定にあります。おそらく、「en_US」などに設定されており、Unicodeに対応していないためです。


1


OS設定が統一されていないUnicode文字列を印刷するときは、明示的なhttp://docs.python.org/library/stdtypes.html#str.encode[encoding]の使用を検討してください。

_ _ unicode.encode([encoding [、errors]])

文字列のエンコードされたバージョンを返します。 デフォルトのエンコーディングは、現在のデフォルトの文字列エンコーディングです。 異なるエラー処理スキームを設定するためにエラーが与えられる場合があります。 エラーのデフォルトは「strict」です。つまり、エンコードエラーはUnicodeErrorを発生させます。 他の可能な値は、「ignore」、「replace」、「xmlcharrefreplace」、「backslashreplace」、およびcodecs.register_error()を介して登録されたその他の名前です。セクションコーデック基本クラスを参照してください。 可能なエンコーディングのリストについては、「標準エンコーディング」セクションを参照してください。 _ _

例えば、

>>> print unichr(0xff).encode('iso8859-1')
����??
>>>