проблема с питоном unichr - PullRequest
       32

проблема с питоном unichr

2 голосов
/ 06 апреля 2010

У меня проблема с unichr() на моем сервере. Пожалуйста, смотрите ниже:

На моем сервере (Ubuntu 9.04):

>>> print unichr(255)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
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 ]

6 голосов
/ 06 апреля 2010

При использовании ключевого слова "print" вы будете записывать в выходной поток sys.stdout. sys.stdout обычно может отображать строки Unicode, только если символы можно преобразовать в ascii с помощью str(message).

При печати вам необходимо кодировать кодировку терминала вашей ОС, чтобы это можно было сделать.

Модуль locale может иногда определять кодировку консоли вывода:

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

но обычно лучше просто указать кодировку самостоятельно, так как python часто ошибается:

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

UTF-8 или latin-1, я думаю, часто используется во многих современных дистрибутивах Linux.

Если вам известна кодировка вашей консоли, строки ниже будут автоматически кодировать строки Unicode при использовании «print»:

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

Если кодировка ascii или что-то подобное, вам может потребоваться изменить кодировку консоли вашей ОС, чтобы иметь возможность отображать этот символ.

Смотри также: http://wiki.python.org/moin/PrintFails

2 голосов
/ 06 апреля 2010

Это на самом деле не unichr() связано. Проблема связана с настройкой локали в вашей серверной среде, так как она, вероятно, установлена ​​на что-то вроде en_US и не поддерживает Unicode.

2 голосов
/ 06 апреля 2010

Настройки терминала на вашем сервере разные, возможно, они установлены на 7-битный US ASCII.

1 голос
/ 06 апреля 2010

Попробуйте использовать явную кодировку при печати строк в кодировке Unicode, где настройки ОС не одинаковы.

unicode.encode([encoding[, errors]])

Возвращает закодированную версию строки. Кодировка по умолчанию - текущая кодировка строки по умолчанию. ошибки могут быть заданы для установки другой схемы обработки ошибок. По умолчанию для ошибок используется «строгий», что означает, что ошибки кодирования вызывают UnicodeError. Другими возможными значениями являются «игнорировать», «заменить», «xmlcharrefreplace», «backslashreplace» и любое другое имя, зарегистрированное с помощью codecs.register_error (), см. Раздел «Базовые классы кодека». Список возможных кодировок см. В разделе «Стандартные кодировки».

Например,

>>> print unichr(0xff).encode('iso8859-1')
����??
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...