我正在尝试将一些数据写入文件。在某些情况下,显然取决于我尝试写入的数据,我得到UnicodeEncodeError(UnicodeEncodeError:'charmap'编解码器无法对位置141处的字符'\ U0001f622'进行编码:字符映射到) 我做了一些研究,发现我可以使用编码功能对正在编写的数据进行编码。
这是修改它之前的代码(不支持Unicode):
scriptDir = os.path.dirname(__file__)
path = os.path.join(scriptDir, filename)
with open(path, 'w') as fp:
for sentence in iobTriplets:
fp.write("\n".join("{} {} {}".format(triplet[0],triplet[1],triplet[2]) for triplet in sentence))
fp.write("\n")
fp.write("\n")
所以我也许可以像这样写时添加编码:
fp.write("\n".join("{} {} {}".format(triplet[0],triplet[1],triplet[2]).encode('utf8') for triplet in sentence))
但是这不起作用,因为我收到以下错误: TypeError:序列项0:预期的str实例,找到的字节
我还尝试在字节模式下打开文件,并在w后面添加b。但这并没有产生任何结果。
有人知道如何解决此问题吗? 顺便说一句:我正在使用python 3。
答案 0 :(得分:1)
您已经使用自动编码打开了文件。除非您要编写二进制文件,否则无需手动编码任何内容。
您可以在open()
中指定任何受支持的编码:
with open(path, 'w', encoding='utf-16be') as fp:
除非以二进制文件形式打开文件,否则需要删除str.encode()
中的fp.write()
:
fp.write("\n".join("{} {} {}".format(triplet[0],triplet[1],triplet[2]) for triplet in sentence))