Windows Python:使用语言环境模块更改编码

Cri*_*spy 3 python encoding locale utf-8 setlocale

使用 Python 2.7

我正在编写一个抽象的网页抓取工具,但在显示(打印)某些字符时遇到了问题。

我收到回溯错误: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()
Run Code Online (Sandbox Code Playgroud)

这是我用来缩小语言环境设置选项的代码。(这里没有问题,代码只是让任何想要的人都可以跟随)

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
Run Code Online (Sandbox Code Playgroud)

这给出了输出:

[('en_ie.utf8@euro', 'en_IE.UTF-8'), ('universal.utf8@ucs4', 'en_US.UTF-8')]
Run Code Online (Sandbox Code Playgroud)

这就是我的问题所在;尝试将设置更改为en_US.UTF-8.

[IN]: locale.setlocale( locale.LC_ALL, 'en_US.UTF-8' )
[OUT]: Traceback code ...
[OUT]: locale.Error: unsupported locale setting
Run Code Online (Sandbox Code Playgroud)

抱歉所有的代码,出于某种原因,我觉得有必要这样做。

小智 6

检查这个https://docs.moodle.org/dev/Table_of_locales

我认为在 Windows 中您需要设置 'localewin' 值而不是区域设置名称。设置locale.setlocale( locale.LC_ALL, 'English_United States.1252' )在 Windows 中对我有用。我还尝试设置不同的语言环境Dutch_Netherlands.1252,它们奏效了。虽然这可能无法解决您的 UnicodeEncodeError 问题,但我认为这至少可以解释您无法设置语言环境的原因。