Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 特殊字符,如ç;和ã;不是';当从文件中获取文本时,不进行解码_Python_Python 3.x_Ubuntu_Visual Studio Code_Vscode Code Runner - Fatal编程技术网

Python 特殊字符,如ç;和ã;不是';当从文件中获取文本时,不进行解码

Python 特殊字符,如ç;和ã;不是';当从文件中获取文本时,不进行解码,python,python-3.x,ubuntu,visual-studio-code,vscode-code-runner,Python,Python 3.x,Ubuntu,Visual Studio Code,Vscode Code Runner,我正在学习Python,并尝试制作一个挂起的游戏(直译-不知道英语游戏的真实名称。对不起)。对于那些不熟悉这个游戏的人,玩家必须通过一次猜一个字母来发现一个秘密单词 在我的代码中,我获得了一组秘密单词,这些单词是使用以下代码从txt文件导入的: words_bank = open('palavras.txt', 'r') words = [] for line in words_bank: words.append(line.strip().lower()) words_bank.close

我正在学习Python,并尝试制作一个挂起的游戏(直译-不知道英语游戏的真实名称。对不起)。对于那些不熟悉这个游戏的人,玩家必须通过一次猜一个字母来发现一个秘密单词

在我的代码中,我获得了一组秘密单词,这些单词是使用以下代码从txt文件导入的:

words_bank = open('palavras.txt', 'r')
words = []
for line in words_bank:
  words.append(line.strip().lower())
words_bank.close()
print(words)
print(words)
的输出是
['ma\xc3\xa7\xc3\xa3','a\xc3\xa7a\xc3\xad','tucum\xc3\xa3']
但是如果我尝试
print('maçã,açaí,tucumã')
检查特殊字符,所有内容都正确打印。看起来问题出在文件中的特殊字符的编码(或解码…我仍在阅读大量关于它的文章以真正理解)上

我的代码第1行的内容是
#coding:utf-8
,因为经过一些研究,我发现我必须指定编码/解码文本所需的Unicode格式。添加之前,我在运行代码时收到以下消息:

File "path/forca.py", line 12
SyntaxError: Non-ASCII character '\xc3' in file path/forca.py on line 12, but no encoding declared
第12行内容:
print('maçã,açaí,tucumã')

我已经尝试过的事情:

  • encode='utf-8'
    作为参数添加到
    open('palavras.txt','r')
  • decode='utf-8'
    作为参数添加到
    open('palavras.txt','r')
  • 同上,但使用拉丁语1
  • 将第1行内容替换为
    #编码:拉丁文1
我的操作系统是Ubuntu20.04LTS,我的IDE是VS代码。 什么都不管用! 我不知道该怎么搜索,该怎么做了

此处的解决方案

多亏了上面朋友们的帮助,我才发现真正的问题出在Ubuntu 20.04 LTS的combo VS Code extension(Code Runner)+python别名版本上

在我的情况下,CodeRunner被设置为在Terminal中运行代码,所以显然,当它调用python时,别名版本是Python2.7.x。为了克服这种情况,我使用线程将Python3设置为默认值

完成了!无论何时调用python,无论是在terminal中还是在使用CodeRunner的VS代码中,所有特殊字符都可以正常工作


感谢大家的时间和帮助=)

只有在使用Python2.x时才会发生这种情况。

错误可能是因为您正在打印列表,而不是打印列表中的项目

调用
print(words)
words
是一个列表)时,Python在list对象上调用一个名为
repr
的特殊函数。然后,列表通过在列表中的每个子级中调用
repr
来创建列表的摘要表示,然后创建一个整洁的字符串可视化

repr(string)
实际上返回的是ASCII表示(带转义符),而不是适合终端的版本

相反,请尝试:

for x in words:
    print(x)
注意。
open
的选项是
encoding
。例如

open('myfile.txt', encoding='utf-8')

您应该始终传递
编码
选项以打开-Python您似乎正在使用Python 2而不是Python 3
#编码:
注释仅适用于您的Python代码,而不适用于包含数据的其他随机文件。Python3在Ubuntu上的默认值应该是UTF-8,所以我同意你似乎在使用Python2,尽管你声称相反。你能(在shell控制台中)键入:
文件palavras.txt
?它将告诉您文本文件实际使用的编码。您正在添加的
#coding
只是对某些文本编辑器(或python解释器)的提示;它不会改变实际的编码,也不会对当前的python代码产生任何影响。使用
python3
运行您的示例。当然,您的文件也可能包含。在您显示文件中的实际字节之前,我们无法确定。(虽然Python 3的症状看起来仍然不同。)另请参阅
print()
的输出也取决于您的平台和Python的配置方式,尤其是在Python 2上。@tripleee确实,这是我花了很多时间研究的问题-请参阅我以前的答案。在本例中,为了简洁起见,我将其保持简短。我不喜欢的是Py3现在正确地在非ASCII上报告。但请注意我的Mac终端上的Py2与Py3输出,配置为
en_GB.UTF-8
>>> print ['maçã', 'açaí', 'tucumã']
['ma\xc3\xa7\xc3\xa3', 'a\xc3\xa7a\xc3\xad', 'tucum\xc3\xa3']
>>> repr('maçã')
"'ma\\xc3\\xa7\\xc3\\xa3'"
>>> print 'maçã'
maçã
>>> print(['maçã', 'açaí', 'tucumã'])
['maçã', 'açaí', 'tucumã']
>>> repr('maçã')
"'maçã'"