在 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。
我正在尝试使用歌曲名称来处理文本文件。我想通过将所有空格和制表符更改为 +
.
这是代码:
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。