问题描述
代码如下:
s = 'Waitematā'
w = open('test.txt','w')
w.write(s)
w.close()
我收到以下错误消息。
UnicodeEncodeError: 'charmap' codec can't encode character '\u0101' in position 8: character maps to <undefined>
该字符串将显示为宏,a,ā。但是,我无法将其写入.txt或.csv文件。
我可以将我们的光圈a换为ā了吗?感谢您的提前帮助。
解决方法
请注意,如果使用open('text.txt','w')
打开文件并向其中写入字符串,则不是将字符串写入文件,而是将编码后的字符串写入文件。使用哪种编码取决于您的LANG
环境变量或其他因素。
如标题所示,要强制使用UTF-8,您可以尝试以下操作:
w = open('text.txt','wb') # note for binary
w.write(s.encode('utf-8')) # convert str into byte explicitly
w.close()
,
如open中所述:
在文本模式下,如果未指定编码,则使用的编码取决于平台:调用
locale.getpreferredencoding(False)
以获取当前的语言环境编码。
并非所有编码都支持所有Unicode字符。由于未指定时编码依赖于平台,因此在读取或写入文本文件时显式并调用编码会更好,更便于移植。 UTF-8支持所有Unicode代码点:
s = 'Waitematā'
with open('text.txt','w',encoding='utf8') as w:
w.write(s)