【问题标题】:Change python 3.7 default encoding from cp1252 to cp65001 aka UTF-8将 python 3.7 默认编码从 cp1252 更改为 cp65001 aka UTF-8
【发布时间】:2019-07-11 19:13:53
【问题描述】:

我需要将 Python 的编码从 Windows-1252 更改为 UTF-8。我正在使用 Python 3.7.1、Atom 和终端的 Atom 脚本包。

我已经阅读了PEP 540 -- Add a new UTF-8 Mode(对此的解决方案?我不知道如何实现或是否有用)我找不到合适的解决方案。

目前它无法处理 '\u2705' 或其他。检查我发现的 Python 文件目录时 ...Python\Python37\lib\encodings\cp1252.py

# When I run
import locale
import sys
print(sys.getdefaultencoding())
print(locale.getpreferredencoding())

# I get
utf-8
cp1252
[Finished in 0.385s]

# Error for print('\u2705')
Traceback (most recent call last):
File "C:\Users\en4ijjp\Desktop\junk.py", line 7, in <module>
print('\u2705').decode('utf-8')
File "C:\Users\en4ijjp\AppData\Local\Programs\Python\Python37\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2705' in
position 0: character maps to <undefined>
[Finished in 0.379s]

我希望我的终端能够处理字符并在使用 print() 时显示它们。

【问题讨论】:

  • 这是编码错误,不是解码错误。当您尝试 print() 某事时,可能会发生这种情况——所以这不是 bs4 的错,但您的终端无法打印有问题的字符。可以肯定的是,我们需要回溯。
  • 在我的终端上打印 IPC-Store ✅ 所以我认为错误不在 BeautifulSoup 方面
  • 我们仍然需要回溯来帮助您。在给定的代码 sn-p 中,我看不出发生 UnicodeEncodeError 的原因。
  • 该错误最终是由第 236 行的print(scrape_dict) 引起的(不是显示的代码的一部分),正如我所怀疑的那样。我认为这个问题与beautifulsoup无关;只执行print('\u2705') 的脚本可能足以重现异常。
  • 如果你写一个 Python 脚本只有这一行 print('\u2705'),会发生什么?

标签: python encoding utf-8 atom-editor


【解决方案1】:

将以下内容放在 Python 脚本的顶部时会解决此问题。我能够正确打印所有字符。

import sys
import io

sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding = 'utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding = 'utf-8')

【讨论】:

  • 你是救世主!!!!非常感谢!这是迄今为止最好的解决方案!!!!
猜你喜欢
  • 2015-04-14
  • 2017-02-27
  • 2010-10-29
  • 2014-12-30
  • 1970-01-01
  • 1970-01-01
  • 2014-04-23
  • 2012-03-10
相关资源
最近更新 更多