странная ошибка языка Python. что здесь происходит? - PullRequest
30 голосов
/ 02 декабря 2009

Итак, сегодня я обновился до базара 2.0.2 и начал получать это сообщение (кстати, я на снежном барсе):

bzr: warning: unknown locale: UTF-8
  Could not determine what text encoding to use.
  This error usually means your Python interpreter
  doesn't support the locale set by $LANG (en_US.UTF-8)
  Continuing with ascii encoding.

очень странно, так как мой LANG фактически пуст. Подобные вещи случаются, когда я пытаюсь повозиться с модулем локали

Python 2.5.4 (r254:67916, Nov 30 2009, 14:09:22) 
[GCC 4.3.4] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> locale.getdefaultlocale()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/sbo/runtimes/lib/python2.5/locale.py", line 443, in getdefaultlocale
    return _parse_localename(localename)
  File "/Users/sbo/runtimes/lib/python2.5/locale.py", line 375, in _parse_localename
    raise ValueError, 'unknown locale: %s' % localename
ValueError: unknown locale: UTF-8

экспорт LANG не помогает

sbo@dhcp-045:~ $ export LANG=en_US.UTF-8
sbo@dhcp-045:~ $ bzr
bzr: warning: unknown locale: UTF-8
  Could not determine what text encoding to use.
  This error usually means your Python interpreter
  doesn't support the locale set by $LANG (en_US.UTF-8)
  Continuing with ascii encoding.

Однако это решило проблему

sbo@dhcp-045:~ $ export LANG=en_US.UTF-8
sbo@dhcp-045:~ $ export LC_ALL=en_US.UTF-8

Python 2.5.4 (r254:67916, Nov 30 2009, 14:09:22) 
[GCC 4.3.4] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> locale.getdefaultlocale()
('en_US', 'UTF8')

Не могли бы вы объяснить, что здесь происходит, для лучшего googlability?

Ответы [ 3 ]

17 голосов
/ 02 декабря 2009

2016 ОБНОВЛЕНИЕ: Оказывается, это ошибка Python , поскольку, по крайней мере, 2013 год, очень вероятно, также и раньше, состоящий в том, что Python плохо реагирует на локали не-GNU - как в Mac OS X BSDs. Ошибка по-прежнему открыта по состоянию на сентябрь 2016 года и затрагивает все версии Python.


Если переменная окружения не установлена ​​LANG, скорее всего, у вас была либо переменная окружения LC_CTYPE (переменная ключа), либо LC_ALL (которая переопределяет, если установлена), установленная на UTF-8, которая не является действительный язык OS X Воспроизвести достаточно с помощью /usr/bin/python, поставляемого Apple, или с пользовательским питоном, как в вашем случае, который был собран с 10.6 SDK (возможно, также 10.5 SDK). Вы не сможете воспроизвести его таким образом с python.org; в настоящее время они построены с использованием 10.4 SDK, где API локали ведут себя по-разному.

$ unset LANG
$ env | grep LC_
$ export LC_CTYPE="UTF-8"
$ /usr/bin/python  # Apple-supplied python
Python 2.6.1 (r261:67515, Jul  7 2009, 23:51:51) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale ; locale.getdefaultlocale()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/locale.py", line 459, in getdefaultlocale
    return _parse_localename(localename)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/locale.py", line 391, in _parse_localename
    raise ValueError, 'unknown locale: %s' % localename
ValueError: unknown locale: UTF-8
^D
$ /usr/local/bin/python2.6   # python.org python
Python 2.6.4 (r264:75821M, Oct 27 2009, 19:48:32) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale ; locale.getdefaultlocale()
(None, 'mac-roman')
>>> 

EDIT:

Там может быть еще один кусок головоломки. Быстрый просмотр установленного мной bzr 2.0.1 показывает, что цитируемое вами сообщение должно отображаться только в том случае, если locale.getpreferredencoding() поднимает locale.Error. Это может произойти, если расширение python _locale.so C не может быть загружено, и это может произойти, если на нем есть проблемы с правами доступа. Например, в настоящее время известно, что MacPorts имеет проблем с настройкой разрешений, если у вас настроен umask ; Я был сожжен этой проблемой сам. Проверьте разрешения _locale.so в каталоге python lib/python2.5/lib-dynload и убедитесь, что оно 755. Полный путь для MacPorts должен быть:

/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload/
7 голосов
/ 19 июня 2017

Я столкнулся с той же проблемой. Когда я запустил locale, я заметил, что LANG и LC_ALL были не установлены. Поэтому я исправил это, добавив следующие строки в файл .bash_profile:

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

Тогда я просто побежал:

source ~/.bash_profile 

И эта проблема была впоследствии исправлена ​​на моем Mac.

4 голосов
/ 02 декабря 2009

Это проблема Mac OS X. Чтобы увидеть настройки локали, запустите locale в терминале. locale -a должен перечислить все локали, которые вы определили (которые вы можете использовать в качестве аргумента для LC_ALL).

Обратите внимание, что LC_ALL и другие LC_* переменные имеют приоритет над LANG, когда они определены.

...