此问题在此处已有答案:
What encoding does open() use by default?(2个答案)
Python, Unicode, and the Windows console(15个答案)
8小时前关门了。
我正在尝试操作一个包含歌曲名称的文本文件。我想通过将所有空格和制表符更改为+
来清理数据。
这是密码:
input = open('music.txt', 'r')
out = open("out.txt", "w")
for line in input:
new_line = line.replace(" ", "+")
new_line2 = new_line.replace("\t", "+")
out.write(new_line2)
#print(new_line2)
fh.close()
out.close()
它给了我一个错误:
Traceback (most recent call last):
File "music.py", line 3, in <module>
for line in input:
File "C:\Users\nfeyd\AppData\Local\Programs\Python\Python36\lib\encodings\cp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 2126: character maps to <undefined>
由于music.txt是以UTF-8格式保存的,因此我将第一行改为:
input = open('music.txt', 'r', encoding="utf8")
这会产生另一个错误:
UnicodeEncodeError: 'charmap' codec can't encode character '\u039b' in position 21: character maps to <undefined>
我尝试了out.write()
的其他功能,但没有工作。
这是music.txt的原始数据。https://pastebin.com/FVsVinqW
我把它保存在Windows编辑器作为UTF-8.txt文件。
1条答案
按热度按时间ne5o7dgx1#
如果你的系统默认编码不是UTF-8,那么你需要在Windows上Python 3的遗留版本上为你打开的两个文件句柄显式地配置它。
这演示了如何使用更少的临时变量进行替换;我还进行了重构以使用
with
上下文管理器,并重命名了文件句柄变量以避免隐藏内置的input
函数。展望未来,也许更好的解决方案是升级Python版本;我的理解是Python现在应该也在Windows上默认提供UTF-8了。