在 Windows 上编辑 UTF-8 文本文件

Editing UTF-8 text file on Windows

我正在尝试使用歌曲名称来处理文本文件。我想通过将所有空格和制表符更改为 +.

来清理数据

这是代码:

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

如果您系统的默认编码不是 UTF-8,您将需要为您打开的两个文件句柄显式配置它,在 Python3 的旧版本上 Windows。

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。