Python 特殊字符,如ç;和ã;不是';当从文件中获取文本时,不进行解码
我正在学习Python,并尝试制作一个挂起的游戏(直译-不知道英语游戏的真实名称。对不起)。对于那些不熟悉这个游戏的人,玩家必须通过一次猜一个字母来发现一个秘密单词 在我的代码中,我获得了一组秘密单词,这些单词是使用以下代码从txt文件导入的: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
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
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çã'"