我在文本聚类时,将选好的文本词写入到TXT文本时发生了乱码的问题。具体下面这种情况:
就是将本本字符写到txt文本,txt文本是默认的ANSI,查了很多资料都说是编码格式的问题。
问题说明:文中的是十六进制,而且是bytes类型。
字符串的类型只有两种(str,bytes)。编码的方式有utf-8,GBK等等。利用encode(编码方式)将str型字符串变成bytes型字符串。decode(编码方式)就反过来。
下面看我的代码:
result = open(docPath,'a',encoding = 'utf-8')
for j in range(len(word)):
#print(type(word[j]))
result.write(str(word[j].encode('utf-8') + b' '))
result.write('\r\n')
其中word[j]的内容是这样的 '一周', '一场', '一堆', '一种', '一秒', '一路', '万事开头难', '三元组', 典型的文本字符串。(word[j].encode('utf-8') + b' ')就是bytes型字符,没有转成str型,导致写入进去的时候就变成上图的结果(我也不知道为啥没转成)
然后我就改了循环里的代码
for ci in (word):
result.write(ci + ' ')
result.write('\r\n')
结果txt文件中没有十六进制了,但是出现乱码的文字
想到txt文件默认的编码是ANSI模式,但是我open时的写文件方式是“utf-8”,显然解码与编码方式冲突,所以我就把encoding的方式去掉,让他默认
result = open(docPath, 'a')
for ci in (word):
result.write(ci + ' ')
result.write('\r\n')
文本结果如下,问题就解决了:
总结哈,分析原理,根据原理找自己代码里的问题,真的得一步一步试试。