python中sys.setdefaultencoding('utf-8')的作用

2023-11-03

在python中,编码解码其实是不同编码系统间的转换,默认情况下,转换目标是Unicode,即编码unicode→str,解码str→unicode,其中str指的是字节流,而str.decode是将字节流str按给定的解码方式解码,并转换成utf-8形式,u.encode是将unicode类按给定的编码方式转换成字节流str。注意调用encode方法的是unicode对象,生成的是字节流;调用decode方法的是str对象(字节流),生成的是unicode对象。若str对象调用encode会默认先按系统默认编码方式decode成unicode对象再encode,忽视了中间默认的decode往往导致报错。

 

比如有如下代码: 

  #! /usr/bin/env python 
  # -*- coding: utf-8 -*- 
  s = '中文字符'  # 这里的 str 是 str 类型的,而不是 unicode 
  s.encode('gb2312') 

这句代码将 s 重新编码为 gb2312 的格式,即进行 unicode -> str 的转换。因为 s 本身就是 str 类型的,因此 
Python 会自动的先将 s 解码为 unicode ,然后再编码成 gb2312。因为解码是python自动进行的,我们没有指明解码方式,python 就会使用 sys.defaultencoding 指明的方式来解码。很多情况下 sys.defaultencoding为ANSCII,如果 s 不是这个类型就会出错。
  UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 
  0: ordinal not in range(128) 

对于这种情况,我们有两种方法来改正错误: 
1. 明确的指示出 s 的编码方式 

  #! /usr/bin/env python 
  # -*- coding: utf-8 -*- 
  s = '中文字符' 
  s.decode('utf-8').encode('gb2312') 

2. 更改 sys.defaultencoding 为文件的编码方式 

  #! /usr/bin/env python 
  # -*- coding: utf-8 -*- 
  import sys 
  reload(sys) # Python2.5 初始化后删除了 sys.setdefaultencoding 方法,我们需要重新载入 
  sys.setdefaultencoding('utf-8') 

  str = '中文字符' 
  str.encode('gb2312')

 

 

转载于:https://www.cnblogs.com/guosq/p/6378639.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python中sys.setdefaultencoding('utf-8')的作用 的相关文章

随机推荐

  • Open3D (C++) 点云投影到圆柱

    目录 一 算法原理 1 圆柱方程 2 投影原理 二 代码实现 三 结果展示 1 原始点云 2 投影结果 四 参考链接 一 算法原理 1 圆柱方程 圆柱方程可以表示为 x x
  • CSS的相对定位,绝对定位,固定定位,及元素重叠(层级问题)

    CSS的相对定位 绝对定位 固定定位 及元素重叠 层级问题 1 项目问题及思考 1 1 问题一 关于定位问题 最近在做vue项目时 遇到这样一个需求 需要在Echarts的柱状图左侧的title的text文字内容加一个鼠标悬浮的文字提示 刚
  • Django中的Q查询

    class Poll models Model slug models SlugField unique for month pub date question models CharField maxlength 255 pub date
  • 小程序线上请求不到后台数据,开发工具上编译正常

    开发工具上真机调试请求 status failed 已配置合法域名 ssl证书未到期 https访问正常 使用此网站检测到缺少中间证书 解决方法 1 使用上面网站的证书分析 复制证书内容生成并下载中间证书文件 2 打开下载的中间证书复制到原
  • 宝塔面板搭建WordPress网站完整教程

    概述 如果还有不了解宝塔面板怎么使用的小伙伴 可以看下我总结的系列教程 保证从新手变老鸟 宝塔面板精选教程汇总 宝塔面板教程 1 基于云服务器搭建宝塔面板教程最全详解 宝塔面板教程 2 宝塔面板添加WordPress站点详细图文教程 宝塔面
  • 深度剖析Vmware 裸机映射,看完秒懂!

    不使用裸机映射时 虚拟机上的虚拟磁盘需要制作文件系统 在书记写入的过程中数据需要先使用虚拟磁盘上的文件系统进行写入 写入完成后 虚拟磁盘文件 vmkd仍然需要使用ESXI主机存储的文件系统 VMFS 在写入真实存储中 这样就导致需要经过两种
  • Save Money for Your Company 最小矩形覆盖(非计算几何)/找出N条直线相交点的边缘点/ find the dominating points of N lines

    Save Money for Your Company Description You are the director of a mining enterprise aiming to purchase an mining land fo
  • 【人工智能】人工智能与人类智能的关系

    1 基本概念界定 1 1人工智能 人工智能是在20世纪中期以后产生的学科 人工智能就是用机器模拟人类的智能活动 从而用机器代替人类行使某些方面的职能 人工智能是通过探索人的感觉和思维的规律来模拟人的智能活动 电子计算机是人工智能的媒介和基础
  • 我是双非一本软件工程毕业,想做技术文档工程师

    收到一位来自知乎网友 姜莱的咨询 征得本人同意 在此做一个公开答复吧 姜莱你好 非常感谢你的信任 在择业的关键路口 愿意听我这个陌生人聊聊想法 作为一只 误入歧途 在技术传播行业摸爬滚打了10 年的TC狗 简单分享一下个人经验 仅供参考 希
  • 1740 找到二叉树中的距离

    题目描述 给定一棵二叉树的根节点 root 以及两个整数 p 和 q 返回该二叉树中值为 p 的结点与值为 q 的结点间的 距离 两个结点间的 距离 就是从一个结点到另一个结点的路径上边的数目 示例 1 输入 root 3 5 1 6 2
  • 飞桨学习笔记之图像分割套件PaddleSeg

    1 概述 2 基本原理 2 1 DeepLabv3 2 2 U Net 2 3 PSPNet 2 4 ICNet 2 5 HRNet 2 6 Fast SCNN 2 7 模型选择 2 8 模型评估 3 具体实现过程 3 1 准备数据集 3
  • 使用指纹的锁屏解锁流程

    startuml gt BiometricUnlockController onBiometricAuthenticated BiometricUnlockController gt BiometricUnlockController st
  • STM32在线升级OTA,看这一篇就够啦~

    本文是博主在学习OTA时 up主阿正推荐学习的文章 原作者leafguo 写的非常简洁明了 在获得授权后整理发布 可以在文末点击阅读原文跳转到原文章 简介 本文主要讲解在线升级 OTA 的基础知识 主要是针对IAP OTA从原理分析 分区划
  • DVWA靶机,通过XSS盗取cookie登录

    文章目录 一 发现XSS漏洞 1 1 登录DVWA 找到XSS DOM 模块 测试XSS是否存在 1 2 在选项的传参后面加入一串js代码 也就是可以XSS弹出的代码 payload如下 二 盗取cookie 2 1 在XSS平台上搭建一个
  • Linux 学习视频完整

    链接 https pan baidu com s 1O6zsaYo7kl28QTpOnr9wCA 提取码 e7u4
  • docker部署harbor

    一 harbor下载 官方下载地址 Releases goharbor harbor GitHub 二 harbor安装 1 解压安装包 tar xzvf harbor XXXX tgz 2 配置修改 复制harbor yml tmpl文件
  • quagga源码学习--BGP协议中的routemap

    路由策略的基础知识 定义 路由策略 Routing Policy 作用于路由 主要实现了路由过滤和路由属性设置等功能 它通过改变路由属性 包括可达性 来改变网络流量所经过的路径 目的 路由器在发布 接收和引入路由信息时 根据实际组网需要实施
  • uniapp 多选框的全选功能实现

    uniapp内置的checkbox其实以及checkbox group本来挺好的 但是有两个问题 无法依赖其事件实现全选 样式固定 难以修改 他们无法实现全选的原因是 我动态修改checkbox的checked字段时 界面上的状态能够实时变
  • Spring Cloud框架学习-Spring Cloud Stream

    文章目录 1 基本介绍 2 设计思想 3 常用注解 4 简单入门 5 自定义消息通道 6 消息分组 处理消息重复消费 7 消息分区 7 1 概念 7 2 使用示例 8 延时消息 8 1 安装插件 8 2 具体实现 1 基本介绍 Spring
  • python中sys.setdefaultencoding('utf-8')的作用

    在python中 编码解码其实是不同编码系统间的转换 默认情况下 转换目标是Unicode 即编码unicode str 解码str unicode 其中str指的是字节流 而str decode是将字节流str按给定的解码方式解码 并转换