我正在尝试将html写入文本文件并遇到问题。起初我无法打印它,但设置翻译有帮助,
non_bmp_map = dict.fromkeys(range(0x10000, sys.maxunicode + 1), 0xfffd)
(在本网站上找到)。
令人讨厌的是,打印和书写文字可能与Python有“不同的交易”;这里的代码失败了:
#--------*---------*---------*---------*---------*---------*---------*---------*
# Desc: writing tau = 'τ'
#--------*---------*---------*---------*---------*---------*---------*---------*
import os, sys
while True:
tau = 'τ'
os.chdir("C:\\Users\\Mike\\Desktop")
dd = open('tmp.txt', 'w')
dd.write(tau + '\n')
dd.close()
sys.exit()
输出:
Traceback (most recent call last):
File "C:\Users\Mike\AppData\Local\Programs\Python\Python36-32\board.py", line 11, in <module>
dd.write(tau + '\n')
File "C:\Users\Mike\AppData\Local\Programs\Python\Python36-32\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u03c4' in position 0: character maps to <undefined>
答案 0 :(得分:1)
打开文件时需要指定编码。 UTF-8在这里几乎总是正确的选择。
import os
tau = "τ"
os.chdir(r"C:\Users\Mike\Desktop")
with open("tmp.txt", "w", encoding='utf-8') as dd:
print(tau, file=dd)
这是许多人在使用open
时忘记的事情,但这很重要。
答案 1 :(得分:1)
听起来您需要在打开文件时指定编码。来自open
documentation:
默认编码取决于平台(无论如何)
locale.getpreferredencoding()
返回
如果您的默认系统编码不包含τ
字符,那么您将收到此错误。尝试指定UTF-8。假设您使用的是Python 3:
dd = open('tmp.txt', 'w', encoding = 'utf-8')