在Ubuntu 12.04中为Python设置UTF-8区域设置

2 投票
1 回答
3961 浏览
提问于 2025-04-18 07:59

在一个使用Vagrant和hashicorp/precise64这个盒子设置的Ubuntu 12.04虚拟机上,我的语言设置显示我使用的是UTF-8,但是Python却获取到了latin-1的环境。

这是我看到的情况:

vagrant@vagrant:~$ locale                                                                                                                                 
LANG=en_US.UTF-8                                                                                                                                          
LANGUAGE=                                                                                                                                                 
LC_CTYPE="en_US"                                                                                                                                          
LC_NUMERIC="en_US"                                                                                                                                        
LC_TIME="en_US"                                                                                                                                           
LC_COLLATE="en_US"                                                                                                                                        
LC_MONETARY="en_US"                                                                                                                                       
LC_MESSAGES="en_US"                                                                                                                                       
LC_PAPER="en_US"                                                                                                                                          
LC_NAME="en_US"                                                                                                                                           
LC_ADDRESS="en_US"                                                                                                                                        
LC_TELEPHONE="en_US"                                                                                                                                      
LC_MEASUREMENT="en_US"                                                                                                                                    
LC_IDENTIFICATION="en_US"                                                                                                                                 
LC_ALL=en_US                                                                                                                                              
vagrant@vagrant:~$ python                                                                                                                                 
Python 2.7.3 (default, Feb 27 2014, 19:58:35)                                                                                                             
[GCC 4.6.3] on linux2                                                                                                                                     
Type "help", "copyright", "credits" or "license" for more information.                                                                                    
>>> print u'\u1f41'                                                                                                                                       
Traceback (most recent call last):                                                                                                                        
  File "<stdin>", line 1, in <module>                                                                                                                     
UnicodeEncodeError: 'latin-1' codec can't encode character u'\u1f41' in position 0: ordinal not in range(256)

我该如何为Python获取一个真正的UTF-8系统环境呢?

1 个回答

4

locale的输出中,LC_CTYPE的地区设置应该是en_US.UTF-8。你可以试试这个:

export LC_ALL="en_US.UTF-8"

如果这样还是不行(比如LC_CTYPE被明确设置了),那么你还可以尝试:

export LC_CTYPE="en_US.UTF-8"

撰写回答