使用Python 2.7
我正在编写一个抽象的Web scraper,在显示(打印)某些字符时遇到问题。
我从打印包含该字符的字符串中得到了追溯错误:UnicodeEncodeError: 'ascii' codec can't encode character u'\u2606' in position 5: ordinal not in range(128)
。
我使用语言环境模块找出我的操作系统支持的设置,虽然我不确定我应该使用语言环境解决我的问题,并注意到(en_US', 'cp1252')
的默认设置。我试图将其更改为('en_US', 'utf-8')
,但遗憾的是无济于事。
#code for default settings
print locale.getdefaultlocale()
这是我用来缩小区域设置选项范围的代码。 (这里没有问题,代码只是任何想要的人,可以跟随)
import locale
all = locale.locale_alias().items()
utfs = [(k,v) for k,v in all if 'utf' in k.lower() or 'utf' in v.lower()]
# utf settings starting with en
en_utfs = [(k,v) for k,v in utfs if k.lower()[:2].lower() == 'en' or
v.lower()[:2] == 'en'
print en_utfs
这给出了输出:
[('en_ie.utf8@euro', 'en_IE.UTF-8'), ('universal.utf8@ucs4', 'en_US.UTF-8')]
这是我的问题所在;尝试将设置更改为en_US.UTF-8
。
[IN]: locale.setlocale( locale.LC_ALL, 'en_US.UTF-8' )
[OUT]: Traceback code ...
[OUT]: locale.Error: unsupported locale setting
对于所有代码感到抱歉,出于某种原因,我觉得有必要这样做。
答案 0 :(得分:4)
选中此https://docs.moodle.org/dev/Table_of_locales
我认为在Windows中你需要设置'localewin'值而不是语言环境名称。设置locale.setlocale( locale.LC_ALL, 'English_United States.1252' )
在Windows中为我工作。我也试过设置不同的语言环境Dutch_Netherlands.1252
并且它们有效。虽然这可能无法解决您的UnicodeEncodeError问题,但我认为这至少解释了为什么您无法设置语言环境。
答案 1 :(得分:0)
我无法解决我的问题,但我通过删除所有非ASCII字符找到了解决方法。请参阅堆栈答案replace non ascii-characters with a single space
答案 2 :(得分:0)
您需要使用全名。例如,使用:
locale.setlocale( locale.LC_CTYPE, 'Chinese (Simplified)_People\'s Republic of China' )
而不是
locale.setlocale(locale.LC_ALL,'zh_CN.cpk936')
如果成功,你应该期待这个结果:
print(locale.getlocale(locale.LC_CTYPE))
("Chinese (Simplified)_People's Republic of China", '936')