热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

UnicodeEncodeError:‘utf8‘codeccan‘tencodecharactersinposition解决方法

一、问题背景爬虫采集来的文件名中含有emoji以及全角半角符号,但是采集时并没有处理,原封不动存储到了数据中。现在有个需求,从数据库中取出数据,发送跟客户端,客户端拿这文件名写入到


一、问题背景

爬虫采集来的文件名中含有emoji以及全角半角符号,但是采集时并没有处理,原封不动存储到了数据中。现在有个需求,从数据库中取出数据,发送跟客户端,客户端拿这文件名写入到文件缓存。问题出现在缓存到了文件,再从文件取出来的时候,报了unicodeError。

二、解决方法 

1.首先服务端发送特殊字符的时候,json dumps的时候要指定ensure_ascii为False,不编码。保留原字符。

2.这里其实有个标准输出问题,客户端拿到传输的字符,json loads 但是emoji或者/u3000这种全角符号依然会存在,但是使用print打印却不会显示。

ss = '/电视剧/换子成龙 02 主 演: 刘恺威 杜淳 马雅舒 程莉莎.CJBVu5Jsr7I.mp4/shot_00000298_frame_00035267.jpg'
d = {'file_path': ss}
f = json.dumps(d, ensure_ascii=False)
# f 的内容
# '{"file_path": "/电视剧/换子成龙 02 主\u3000演: 刘恺威 杜淳 马雅舒 程莉莎.CJBVu5Jsr7I.mp4/shot_00000298_frame_00035267.jpg"}'
k = json.loads(f)
# k 的内容
# {'file_path': '/电视剧/换子成龙 02 主\u3000演: 刘恺威 杜淳 马雅舒 程莉莎.CJBVu5Jsr7I.mp4/shot_00000298_frame_00035267.jpg'}
# 这时候使用print打印
# 显示 /电视剧/换子成龙 02 主 演: 刘恺威 杜淳 马雅舒 程莉莎.CJBVu5Jsr7I.mp4/shot_00000298_frame_00035267.jpg 结果是正常的
# 但是写如文件
with open('test.txt',w) as f:
f.write(k['file_path'])
# 在文件中打开 依然显示\u3000这个字符
# 采用标准输出流重定向
with open('test.txt', 'wt') as f:
print(k['file_path'], file=f)
# 在文件中打开,显示正常不含\u3000


一、问题背景

爬虫采集来的文件名中含有emoji以及全角半角符号,但是采集时并没有处理,原封不动存储到了数据中。现在有个需求,从数据库中取出数据,发送跟客户端,客户端拿这文件名写入到文件缓存。问题出现在缓存到了文件,再从文件取出来的时候,报了unicodeError。

二、解决方法 

1.首先服务端发送特殊字符的时候,json dumps的时候要指定ensure_ascii为False,不编码。保留原字符。

2.这里其实有个标准输出问题,客户端拿到传输的字符,json loads 但是emoji或者/u3000这种全角符号依然会存在,但是使用print打印却不会显示。

ss = '/电视剧/换子成龙 02 主 演: 刘恺威 杜淳 马雅舒 程莉莎.CJBVu5Jsr7I.mp4/shot_00000298_frame_00035267.jpg'
d = {'file_path': ss}
f = json.dumps(d, ensure_ascii=False)
# f 的内容
# '{"file_path": "/电视剧/换子成龙 02 主\u3000演: 刘恺威 杜淳 马雅舒 程莉莎.CJBVu5Jsr7I.mp4/shot_00000298_frame_00035267.jpg"}'
k = json.loads(f)
# k 的内容
# {'file_path': '/电视剧/换子成龙 02 主\u3000演: 刘恺威 杜淳 马雅舒 程莉莎.CJBVu5Jsr7I.mp4/shot_00000298_frame_00035267.jpg'}
# 这时候使用print打印
# 显示 /电视剧/换子成龙 02 主 演: 刘恺威 杜淳 马雅舒 程莉莎.CJBVu5Jsr7I.mp4/shot_00000298_frame_00035267.jpg 结果是正常的
# 但是写如文件
with open('test.txt',w) as f:
f.write(k['file_path'])
# 在文件中打开 依然显示\u3000这个字符
# 采用标准输出流重定向
with open('test.txt', 'wt') as f:
print(k['file_path'], file=f)
# 在文件中打开,显示正常不含\u3000


推荐阅读
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 本文详细介绍了在Linux操作系统上安装和部署MySQL数据库的过程,包括必要的环境准备、安装步骤、配置优化及安全设置等内容。 ... [详细]
  • HTML:  将文件拖拽到此区域 ... [详细]
  • MySQL InnoDB 存储引擎索引机制详解
    本文深入探讨了MySQL InnoDB存储引擎中的索引技术,包括索引的基本概念、数据结构与算法、B+树的特性及其在数据库中的应用,以及索引优化策略。 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 解决PHP项目在服务器无法抓取远程网页内容的问题
    本文探讨了在使用PHP进行后端开发时,遇到的一个常见问题:即在本地环境中能够正常通过CURL获取远程网页内容,但在服务器上却无法实现。我们将分析可能的原因并提供解决方案。 ... [详细]
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • 深入理解Flink的水印机制
    本文详细探讨了Apache Flink框架中的水印机制,这是一种用于处理数据流中时间不一致问题的重要工具。通过介绍水印的工作原理及其在实际应用中的实现方式,帮助读者更好地理解和利用这一功能。 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • Windows操作系统提供了Encrypting File System (EFS)作为内置的数据加密工具,特别适用于对NTFS分区上的文件和文件夹进行加密处理。本文将详细介绍如何使用EFS加密文件夹,以及加密过程中的注意事项。 ... [详细]
  • Java中的引用类型详解
    本文详细介绍了Java中的引用类型,包括强引用、软引用、弱引用和虚引用的特点和应用场景。 ... [详细]
author-avatar
yixianliu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有