python 在Windows上编辑UTF-8文本文件[重复]

ss2ws0br  于 2023-03-16  发布在  Python
关注(0)|答案(1)|浏览(119)

此问题在此处已有答案

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文件。

ne5o7dgx

ne5o7dgx1#

如果你的系统默认编码不是UTF-8,那么你需要在Windows上Python 3的遗留版本上为你打开的两个文件句柄显式地配置它。

with open('music.txt', 'r', encoding='utf-8') as infh,\
        open("out.txt", "w", encoding='utf-8') as outfh:
    for line in infh:
        line = line.replace(" ", "+").replace("\t", "+")
        outfh.write(line)

这演示了如何使用更少的临时变量进行替换;我还进行了重构以使用with上下文管理器,并重命名了文件句柄变量以避免隐藏内置的input函数。
展望未来,也许更好的解决方案是升级Python版本;我的理解是Python现在应该也在Windows上默认提供UTF-8了。

相关问题