python2.x编码Unicode字符串

1 python2.x编码Unicode字符串

python2.x默认编码方法为ASCII码。字符串赋值时按系统默认编码自动编码,通过decode()方法解码为Unicode,再通过encode()方法编码为指定码。

1.1 编码解码基础知识

1.1.1 位

位(bit)是计算机存储数据的最小单位,每一个位存储一个二进制(0或1)。

1.1.2 字节

字节是计算机计算存储容量的一种计量单位。

字节为数据存储单位,位为数据传输单位。

一个字节(Byte)等于8位(bit)二进制。一个位表示1个二进制的0或1。

计算机的数据以字节的形式存储处理。

1.1.3 字符

字符是各种文字和符号的总称,包括字母、数字、各国文字、标点符号、图形符号、运算符、特殊符号和其他符号。

字符是数据结构中最小的数据存取单位。任何一个文字或符号都是一个字符。

1.1.4 编码字符集

把字符映射到数字的表格,称为编码字符集(Character Set),微软称其为代码页(Code Page),也叫内码。

字符集的每个字符都对应一个唯一的十进制代码值,称为码点(码值)(Code Point),是字符在编码字符集中的编号。

所以编码字符集(Character Set)是所有字符以及对应码点的集合,即编码字符集规定了字符与码点的对应关系。

本文编码字符集简称为字符集。比如,ASCII字符集、GBK字符集、Unicode字符集。

比如,ASCII码字符集中的字符a,对应的码值就是97。

1.1.5 字符编码方式

将字符集中字符的十进制代码值转换为实际存储字节系列的映射规则,称为字符编码方式。

比如,ASCII字符编码、GBK字符编码、Unicode字符编码。

1.1.6 字符集与字符编码方式

NO字符集字符编码方式
1ASCII字符集ASCII字符编码
2GBK字符集GBK字符编码
3Unicode字符集UTF-8字符编码
4UTF-16字符编码
5UTF-32字符编码

1.1.7 字符编码

字符是有不同意义的文字和符号,而计算机只能识别0和1二进制组成的字节,所以要确保字符与字节之间能相互转换,计算机才能存储和处理字符。

字符编码就是把字符转为字节,从字节提取字符的规则。

编码:按照指定字符编码方式找到字符对应的字节。

解码:按照指定字符编码方式找到字节对应的字符。

字符在计算机中存储与读取:

存储:字符->字符集->码值->字符编码方式->二进制->存储。

读取:二进制->字符编码方式->码值->字符集->字符->显示。

1.1.8 标准ASCII字符集

标准ASCII码点范围[0,127],只需7位二进制即可覆盖。使用一个字节存储一个字符,首位是0。

1.1.9 GBK字符集

GBK中一个中文字符编码成两个字节,一个英文字符编码成一个字节。

计算机解码‘我a你’时,如何区分一次要解析一个字节还是两个字节?

GBK规定,汉字的第一个字节的第1位必须是1。

‘我a你’GBK编码如下:

1xxxxxxx xxxxxxxx|0xxxxxxx|1xxxxxxx xxxxxxxx

计算机解码时,计算机判断第1字节的第1位,如果为1,则为汉字,一次解析2个字节,如果为0,则为ACII字符,一次解析1个字节。前提:字节必须完整,不能部分截取。

1.1.10 Unicode字符集

Unicode字符集,也叫万国码。

(1) UTF-16编码,每个字符编码为2或4字节。

(2) UTF-32编码,每个字符编码为4字节,1个汉字占2个字节。

(3) UTF-8编码,可变长编码,每个字符编码为1或2或3或4字节,1个汉字占3个字节。

计算机用UTF-8解码时,如何区分要解析1个字节、或2个字节、或3个字节还是4个字节?

(1)第1位为0,则解析1个字节,1个字符占1个字节,

(2)第1位非0,前3位为110,则解析2个字节,舍去前缀110和10,剩余位组成二进制,1个字符占2个字节,

(3)第1位非0,前4位为1110,则解析3个字节,舍去前缀1110、10、10,剩余位组成二进制,1个字符占3个字节,

(4)第1位非0,前5位为11110,则解析4个字节,舍去前缀11110、10、10、10,剩余位组成二进制,1个字符占4个字节,

1.2 查看编码方式

描述

python通过sys和locale查看解释器和系统编码方式。

示例

>>> import sys
>>> import locale
# python解释器默认编码方式
>>> sys.getdefaultencoding()
'ascii'
# 文件系统编码方式
>>> sys.getfilesystemencoding()
'mbcs'
# 终端输入编码方式
>>> sys.stdin.encoding
'cp936'
# 终端输出编码方式
>>> sys.stdout.encoding
'cp936'
# 当前操作系统编码方式
#当前操作系统的默认语言环境是zh_CN(简体中文),默认字符集是cp936(GBK编码)。
>>> locale.getdefaultlocale()
('zh_CN', 'cp936')

1.3 python2.x字符串

python2.x字符串赋值,c=’梯’为字节串,使用系统默认编码方式进行编码后赋值给c。

python2.x通过u’s’创建unicode文本,为宽字符文本。

1.3.1 ‘s’创建字符串自动编码

描述

python2.x通过s=’xxx’创建的字符串常量为字节串,会自动根据系统默认编码方式进行编码。

示例

>>> import locale;import sys
# locale.getdefaultlocale() 获取系统默认编码方式 为cp936
# sys.getdefaultencoding() 获取py解释器编码方式
>>> locale.getdefaultlocale();sys.getdefaultencoding()
('zh_CN', 'cp936')
'ascii'
>>> c='梯'
# c存放的是字节串,是根据系统默认编码方式编码后的字节串
>>> c
'\xcc\xdd'
# 通过's'.decode('编码方式')进行解码,获取 对应 Unicode 字符
# 解码的编码方式 需与 编码时的系统默认编码方式 cp936 一致
>>> c.decode('cp936')
u'\u68af'
# python2.x通过u's'获得unicode字符
>>> u'梯'
u'\u68af'

1.3.2 u’s’创建unicode对象

描述

python2.x通过u’s’创建unicode文本,为宽字符文本。unicode对象可以进行encode()编码。

NO项目py2.xpy3.x
1u’s’,unicode常量创建unicode字符串创建str字符串
2‘s’,字符串常量创建str字符串,按系统默认编码方式进行编码,类型为str,实际为字节串,可以直接进行decode()解码为unicode。创建str字符串
3len(‘梯’)1个汉字, 按gbk编码时,2个字节,长度2, 按utf-8编码是,3个字节,长度3, 1个字节为2位16进制长度1
4len(u’梯’)长度1长度1

示例

# idle py2.7
>>> import sys
>>> sys.version.split(' ')[0]
'2.7.18'
>>> u1,c1=u'梯','梯'
# py2.x u's'创建unicode类型
>>> tuple(map(type,(u1,c1)))
(<type 'unicode'>, <type 'str'>)
# u1-unicode常量,以u开头,用\u转义
# c1-字符串常量,用2位16进制表示1个字节,用\x转义
>>> u1,c1
(u'\u68af', '\xcc\xdd')
>>> tuple(map(len,(u1,c1)))
(1, 2)
# python2.x 字符串常量按系统默认编码方式自动编码
>>> c_gbk='梯'
>>> u=c_gbk.decode('gbk')
>>> c_utf8=u.encode('utf-8')
>>> c_gbk,u,c_utf8
('\xcc\xdd', u'\u68af', '\xe6\xa2\xaf')
# 1个汉字,gbk编码占2个字节,utf-8编码占3个字节,unicode字符集占1个字节
>>> tuple(map(len,(c_gbk,u,c_utf8)))
(2, 1, 3)

# idle py3.7
>>> import sys
>>> sys.version.split(' ')[0]
'3.7.8'
>>> u1,c1=u'梯','梯'
# py3.x u's'创建 str 类型
>>> tuple(map(type,(u1,c1)))
(<class 'str'>, <class 'str'>)
>>> u1,c1
('梯', '梯')
>>> tuple(map(len,(u1,c1)))
(1, 1)

1.4 python2.x的编码和解码

描述

python2.x创建str字符串赋值时,会根据当前系统的默认编码方式自动编码,所以,字符串实际已经是字节串了,此时需要用相同的编码方式进行解码为Unicode,再对Unicode按照指定的编码方式进行encode编码。

python2.x解释器的默认编码方法为ASCII编码,通过sys**.getdefaultencoding()**查看。

字符串赋值使用的编码方式为当前系统的默认编码方式,

通过locale**.getdefaultlocale()**查看。

赋值:自动编码;解码为Unicode,再按指定编码方法编码。

编码:encode(),解码:decode()。
在这里插入图片描述
在这里插入图片描述

示例

# python2.x 字符串常量按系统默认编码方式自动编码
>>> c_gbk='梯'
# 对字节串按指定编码方法解码为unicode
>>> u=c_gbk.decode('gbk')
# 对unicode按指定编码方法编码,gbk解码后编码为utf-8
>>> c_utf8=u.encode('utf-8')
>>> for x in (c_gbk,u,c_utf8):print x,
梯 梯 梯
# python3.x 字符串赋值后为unicode字符串
>>> c='梯'
>>> c_gbk=c.encode('gbk')
>>> c,c_gbk
('梯', b'\xcc\xdd')
>>> c_utf8=c_gbk.decode('gbk').encode('utf-8')
>>> c,c_gbk,c_utf8
('梯', b'\xcc\xdd', b'\xe6\xa2\xaf')
>>> tuple(map(len,(c,c_gbk,c_utf8)))
(1, 2, 3)
>>> tuple(map(type,(c,c_gbk,c_utf8)))
(<class 'str'>, <class 'bytes'>, <class 'bytes'>)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/281630.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于PHP的高校学生宿舍信息系统

有需要请加文章底部Q哦 可远程调试 基于PHP的高校学生宿舍系统 一 介绍 此学生宿舍信息系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端jquery.js。系统角色分为学生&#xff0c;辅导员和宿管员。(附带配套设计文档) 技术栈&#xff1a;phpmysqljquery.jsphpstu…

段永平浙江大学捐赠;合计超10亿元;OpenAI 年收超16亿美元;邻汇吧5000万元C+轮融资

投融资 • 「邻汇吧」完成5000万元C轮融资&#xff0c;安吉政府产业基金投资• 投资者预计明年黄金价格或将创新高• 至臻云完成 A 轮数千万元融资 大模型 • ChatGPT 产品增长强劲 OpenAI 年化收入超 16 亿美元• 周鸿祎&#xff1a;明年大模型一方面追求“大”&#xff0c…

超真实随身WiFi测评,你确定不看一下?随身WiFi靠谱吗? 看完这篇文章你就懂了?随身WiFi真实评测

用了一年多的格行随身wifi&#xff0c;屏幕都磨花了。直接看图&#xff0c;都是自己实测&#xff01; 设备是去年买的&#xff0c;到现在也快1年了&#xff0c;一直有朋友蹲后续&#xff0c;现在把后续给大家&#xff01;到底是大牌子&#xff0c;确定是不跑路的随身wifi&…

解决基于VectorGrid的矢量瓦片Y轴偏移的问题

目录 前言 一、GeoServer的瓦片 1、GeoWebcache缓存配置 2、矢量瓦片本地缓存 3、瓦片访问 二、VectorGrid加载本地瓦片 1、加载关键代码 2、默认模式的问题 3、问题分析 4、tms参数修改 总结 前言 在前面的博文介绍中&#xff0c;在线连接如下&#xff1a;浅谈前端自定义…

国图公考:研究生可以考选调生吗?

研究生可以报考选调生吗?当然是可以的&#xff0c;但是同样需要满足一定的条件才可以。 除本科生外&#xff0c;具有硕士、博士学位的考生均可申请考试。但是&#xff0c;除了满足应届毕业生的身份&#xff0c;还需要满足年龄限制。一般来说&#xff0c;本科生不超过25岁&…

【损失函数】SmoothL1Loss 平滑L1损失函数

1、介绍 torch.nn.SmoothL1Loss 是 PyTorch 中的一个损失函数&#xff0c;通常用于回归问题。它是 L1 损失和 L2 损失的结合&#xff0c;旨在减少对异常值的敏感性。 loss_function nn.SmoothL1Loss(reductionmean, beta1.0) 2、参数 size_average (已弃用): 以前用于确定是…

CANopen DS402 Home offset理解

本文通俗解释CANopen DS402中Home offset的含义。 一 原本解释 CANopen DS402中规定对象字典项0x607C用于存放Home offset&#xff0c;文档中对其解释如下&#xff0c; The home offset object is the difference between the zero position for the application and the mach…

一起玩儿物联网人工智能小车(ESP32)——21. ESP32的LED PWM控制器说明

摘要&#xff1a;本文介绍ESP32的LED PWM控制器的详细原理说明 ESP32芯片提供了2种用于输出PWM的信号的PWM控制器&#xff0c;一种LED控制器&#xff08;LEDC&#xff09;&#xff0c;一种是马达PWM控制器&#xff08;MCPWM&#xff09;。其中MCPWM是专门用于马达调速控制的控制…

缺失的第一个正数(LeetCode 41)

文章目录 1.问题描述2.难度等级3.热门指数4.解题思路4.1 暴力4.2 排序4.3 哈希表4.4 空间复杂度为 O(1) 的哈希表4.5 置换 参考文献 1.问题描述 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级…

k8s搭建(详细演示完整一篇)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

2023年度总结—你是你的年度MVP吗?

这段年度总结其实我之前就想写了&#xff0c;大概就是市赛比完之后18号的样子把&#xff0c;但是因为太懒了就一直拖到了现在哈哈&#xff0c;我思来想去&#xff0c;翻来覆去&#xff0c;彻夜难眠&#xff0c;想了想&#xff0c;还是决定把它写了吧&#xff01;毕竟&#xff0…

【ROS2】MOMO的鱼香ROS2(一)ROS2入门篇——从Ubuntu操作系统开启

从Ubuntu操作系统开启 引言1 术语汇总2 Ubuntu &#xff08;操作系统&#xff09;2.1 Ubuntu权限管理2.2 Ubuntu安装软件2.2.1 使用apt命令安装2.2.2 dpkg安装deb包2.2.3 make install源代码安装 2.3 Ubuntu之常用指令2.3.1 ls命令&#xff08;查看文件&#xff09;2.3.2 cd 命…

生财有术项目精选

生财有术项目精选 25700读者&#xff0c;71内容 这绝对是小报童这个平台的第一名了&#xff0c;背靠着生财有术这个国内最大的副业平台&#xff0c;再加上现如今的副业热潮&#xff0c;成功造就了2W订阅的奇迹 专栏包含66个精选实操赚钱项目&#xff0c;可以说每一个项目都蕴含…

Vue(二):计算属性与 watch 监听器

03. Vue 指令拓展 3.1 指令修饰符 可以通过 . 来指明一些指令的后缀&#xff0c;不同的后缀中封装了不同的操作&#xff0c;可以帮助我们简化代码&#xff0c;比如之前使用过的监听 enter 键的弹起&#xff0c;我们需要操作事件对象&#xff0c;来检测用户使用了哪个键&#…

Python 中的运算符介绍(1)

算数运算符 常见的% 、//、/ 用法 赋值运算符 赋值运算&#xff1a;将等号右边赋值给等号左边 常见场景&#xff1a; 比较运算符 代码解析&#xff1a; 逻辑运算符 位运算符&#xff08;了解&#xff09; 三目运算符 身份证运算符 成员运算符

Vue独立组件开发-动态组件

文章目录 一、前言二、实现三、优化四、总结五、最后 一、前言 在开发中&#xff0c;你经常会遇到这么一种情况&#xff1a;根据条件动态地切换某个组件&#xff0c;或动态地选择渲染某个组件。 Vue 提供了另外一个内置的组件 <component> 和 is 特性&#xff0c;可以更…

【零基础入门VUE】在 Vue 中构建复杂表单

✍面向读者&#xff1a;所有人 ✍所属专栏&#xff1a;零基础入门VUE专栏https://blog.csdn.net/arthas777/category_12537076.html 目录 v-modelVue 中的 指令 Vue 中的组件 没有构建步骤 随着构建步骤 注册 VUE 组件 Vue 道具 VUE 中的道具声明 在 VUE 中传递 PROP…

【web安全】短信等各类验证码的绕过思路整理

前言 本文是对一些验证码可能出现的问题的总结。 验证码的种类分析 首先验证码有两种&#xff1a; 1.短信验证码&#xff0c;这种通常出现在一些登录&#xff0c;修改绑定信息等位置处。 2.人机验证码&#xff0c;这种一般是用来防止机器操作和密码爆破的&#xff0c;通常…

计算机组成原理-总线概述

文章目录 总线简图总线的物理实现总览总线定义总线的特性总线的分类按数据格式分类串行总线并行总线 按总线功能分类注意系统总线的进一步分类 总线的结构单总线的机构双总线的结构三总线的结构四总线的结构 小结 总线简图 总线的物理实现 如果该为数据总线&#xff0c;那么当…

【openlayers-3】加载图标

目录 1、通过overlay方式添加 2、通过overlay css方式 3、通过Feature style方式实现 在OpenLayer3中添加图标有两种方式&#xff0c;一种是通过overlay方式&#xff0c;另一种是通过Feature Style的方式。 1、通过overlay方式添加 <div id"mapCon" styl…