【问题标题】:utf-8 encoding works in iPython console, not in Spyder editorutf-8 编码在 iPython 控制台中工作,而不是在 Spyder 编辑器中
【发布时间】:2021-04-26 15:04:36
【问题描述】:

这是最低限度的测试。在 Spyder Editor 中,我写了这 4 行(仅此而已)

# -*- coding: utf-8 -*-
import sys
print(sys.getdefaultencoding() )
print(u"µ")

我明白了:

utf-8
µ

但如果我只是在 iPython 控制台中复制粘贴这两行,我会得到

我的 .py 文件或 spyder 编辑器有什么问题?

【问题讨论】:

  • 哪个版本的 Python? (又名,为什么是u"..."?)。你确定你没有做复制/粘贴错误(所以添加一个不可见的字符(如颜色))?
  • 文件也可能以utf-8以外的其他编码保存,这是导致问题的原因。
  • 我在家里(我的意思是在另一台电脑上)用 Spyder 4.1.5 试过,我没有重现这个问题。该文件是在 spyder 中创建的,所以我猜它是 utf-8 格式的。第一行“# -- coding: utf-8 --”已经存在了。
  • 我的 Python 版本:3.7.6,Spyder 4.0.1

标签: python utf-8 spyder


【解决方案1】:

我的 .py 文件或 spyder 编辑器有什么问题?

问题很可能是您使用的是 Windows,并且控制台将您的输出解释为 Windows-1252(西欧 Windows 的默认控制台编码):

>>> 'µ'.encode('utf-8').decode('windows-1252')
'µ'

不清楚第一个sn -p是spyder控制台还是windows控制台中普通的pythonshell。

print(sys.getdefaultencoding() )

实际上与任何事情都没有关系。 sys.getdefaultencoding()是内部python编码。

你可以试试PYTHONIOENCODING,或者看看locale.getpreferredencoding()返回什么。

【讨论】:

  • 在 spyder 编辑器中,当我按下 F5 时,它会将文件执行到 iPython 控制台(也显示在 Spyder GUI 中)。我直接在 iPython 控制台中测试相同的代码(复制粘贴),但没有得到相同的结果。
【解决方案2】:

感谢@Carlos Cordoba(Spyder 的大师),我解决了这个问题。

我在 notepad++ 中打开文件,并将其转换为“UTF-8 BOM”(它是 UTF-8 但没有 BOM)

现在可以了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 2017-09-24
    • 2013-09-18
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    相关资源
    最近更新 更多