Ste*_*ini 30 python macos locale osx-snow-leopard
所以今天我升级到了集市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.
Run Code Online (Sandbox Code Playgroud)
非常奇怪,因为我的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
Run Code Online (Sandbox Code Playgroud)
导出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.
Run Code Online (Sandbox Code Playgroud)
但是,这解决了这个问题
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')
Run Code Online (Sandbox Code Playgroud)
你能解释一下这里发生了什么,以获得更好的可搜索性吗?
Ned*_*ily 17
2016更新:事实证明这是一个Python错误,因为至少2013年,非常可能更早,包括Python不能很好地反应非GNU语言环境 - 就像在Mac OS X和BSD中找到的那样.该漏洞在2016年9月仍然开放,并影响每个Python版本.
如果没有LANG设置环境变量,很可能你有一个LC_CTYPE(键变量)或LC_ALL(如果设置的覆盖)环境变量设置为UTF-8,这不是一个有效的OS X语言环境.使用Apple提供的/usr/bin/python或使用自定义python 重现很简单,就像你的情况一样,它是用10.6 SDK(可能还有10.5 SDK)构建的.你将无法用python.org python以这种方式重现它; 它们目前使用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')
>>>
Run Code Online (Sandbox Code Playgroud)
编辑:
这个谜题可能还有另外一块.就让我们来看看在bzr我已经安装了2.0.1表明您引用的消息应该仅会在locale.getpreferredencoding()提出了一个locale.Error.可能发生的一种方法是,如果_locale.so无法加载python C扩展,并且如果存在权限问题,则可能发生这种情况.例如,如果您有自定义的umask,则目前已知MacPorts在设置权限时遇到问题.我自己被这个问题烧伤了.检查_locale.sopython lib/python2.5/lib-dynload目录中的权限并确保它是755.MacPorts的完整路径应该是:
/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload/
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题.当我跑的时候locale,我注意到了LANG并且LC_ALL没有设置.所以我通过在.bash_profile文件中添加以下行来修复此问题:
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)
然后我就跑了:
source ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)
此问题已在我的Mac上修复.
| 归档时间: |
|
| 查看次数: |
12025 次 |
| 最近记录: |