2015-12-07 2 views
1

У меня есть следующее сообщение об ошибке:в UTF-8 вывода с помощью питона

UnicodeEncodeError: 'ascii' codec can't encode character '\xd7' in position 31: ordinal not in range(128) 

из этого кода:

test_string = """ 
Antelope Canyon, Arizona [1600×1068] </a>&#32; <span class="domain">(<a 
""" 

print(test_string) 

Выход sys.getdefaultencoding:

In [6]: sys.getdefaultencoding() 
Out[10]: 'utf-8' 

Я используя Chromebook с crouton - если это имеет значение (у меня такое ощущение, что это может быть).

Я не уверен, есть ли способ «форсировать» вывод таких строк или просто игнорировать любые проблемы, которые являются проблематичными.

terminal or console o redirect cannot handle UTF-8; what environment are you trying to print in.

Я пытаюсь запустить это с помощью IPython в Spacemacs

In [22]: sys.stdout.encoding 
Out[27]: 'ANSI_X3.4-1968' 

In the shell, what does the command locale output?

В оболочке я бегу это в пределах (IPython в Spacemacs) команда не определена, по умолчанию оболочка воспитана с ctrl alt t выходом

$ locale 
LANG= 
LANGUAGE= 
LC_CTYPE="POSIX" 
LC_NUMERIC="POSIX" 
LC_TIME="POSIX" 
LC_COLLATE="POSIX" 
LC_MONETARY="POSIX" 
LC_MESSAGES="POSIX" 
LC_PAPER="POSIX" 
LC_NAME="POSIX" 
LC_ADDRESS="POSIX" 
LC_TELEPHONE="POSIX" 
LC_MEASUREMENT="POSIX" 
LC_IDENTIFICATION="POSIX" 
LC_ALL= 
+3

Ах, символ '×' является символом U + 00D7. –

+0

@MartijnPieters cheers - Я думаю, что это может быть проблема, связанная с Chromebook, поскольку все выглядит фанк здесь http://www.ltg.ed.ac.uk/~richard/unicode-sample-3-2.html, а не конечно, как подтвердить, хотя, поскольку у меня все есть доступ к – baxx

+0

Ваш терминал или консоль o перенаправление не может обрабатывать UTF-8; в какой среде вы пытаетесь напечатать * in *. –

ответ

2

на POSIX хоста, Python и определяет НУ tput от locale, набор переменных среды, которые сообщают, как среда настроена для различных языковых настроек. См. locale.getdefaultlocale() function, или, более конкретно, функцию locale.getpreferredencoding().

Выход этой функции используется для установки sys.stdout.encoding, который затем используется для кодирования любого напечатанного текста в Юникоде.

Ваш языковой стандарт установлен на POSIX, что означает, что по умолчанию кодировка ASCII. Вам нужно будет настроить этот язык для использования кодировки, поддерживающей все Unicode. Как это сделать для Chromebook, я не знаю. На моем Mac локаль установлена ​​в en_US.UTF-8, в основном, поэтому весь стандарт Unicode поддерживается моим терминалом. Вы можете задать проблему, установив export LC_CTYPE=en_US.UTF-8.

Вы можете отменить выбор Python, установив PYTHONIOENCODING environment variable.

Обратите внимание, что на более поздних Python 3-релизах, sys.stdout и sys.stderr использовать backslashescape error handler, который заменяет любой символ, консоль не может справиться со стандартными \xhh, \uhhhh и \Uhhhhhhhh экранирующих последовательностей; поэтому вместо исключения вы бы увидели:

Antelope Canyon, Arizona [1600\xd71068] </a>&#32; <span class="domain">(<a 
+0

Я мог бы заставить его работать отсюда, спасибо – baxx

1

Ах, после поиска и поиска, я нашел this. Как говорится, возможно, вы могли бы попробовать:

  1. Редактировать (создать первый) /etc/locale.gen файл.
  2. Написать следующий текст в нем:

    en_GB.UTF-8 UTF-8 
    LC_ALL="en_GB.UTF-8" 
    
  3. Может попробовать перезагрузить Chromebook.

И затем проверьте вывод команды locale.

Смежные вопросы