已解决UnicodeEncodeError: el códec 'utf-8' no puede codificar caracteres en la posición 42-43: no se permiten sustitutos
Directorio de artículos
código de error
Debe ser python para escribir el archivo de diccionario de sinónimos en txt, y el código de escritura es el siguiente:
# 保存结果
with open(out_path, 'w', encoding='utf8') as f:
f.writelines([word + '\t' + file_name + '\n' for count, py, word, file_name in GTable])
Captura de pantalla del mensaje de error :
词库名: LOL
词库类型: 角色扮演
描述信息: 666
词库示例: 大龙走起不要怂就是干 小龙叫了你们看着办吧 中单撸起 辅助走你 中团啦 中单速度推塔
Traceback (most recent call last):
File "E:/Python/test3.py", line 139, in <module>
f.writelines([word + '\t' + file_name + '\n' for count, py, word, file_name in GTable])
UnicodeEncodeError: 'utf-8' codec can't encode characters in position 42-43: surrogates not allowed
traducción de errores
Traducción del mensaje de error :
Error de codificación Unicode: el códec 'utf-8' no puede codificar caracteres en las posiciones 42-43: no se permiten sustitutos
Motivo del error
Motivo del error :
Algunas cadenas no se pueden decodificar con utf-8, por lo que el carácter "ignorar" que no se puede convertir al formato utf-8 se puede eliminar y luego decodificar.
Solución
Si encuentra este tipo de error, agregue el siguiente código después de la cadena:
.encode('UTF-8', 'ignore').decode('UTF-8')
Modifique el código de escritura a:
# 保存结果
with open(out_path, 'w', encoding='utf-8') as f:
try:
f.writelines([word + '\t' + file_name + '\n' for count, py, word, file_name in GTable])
except:
f.writelines([word.encode('UTF-8', 'ignore').decode('UTF-8') + '\t' + file_name.encode('UTF-8', 'ignore').decode('UTF-8') + '\n' for count, py, word, file_name in GTable])
Escribe de nuevo y es un éxito!