参考链接: Python中的字节对象与字符串

1.常见字符串编码错误

在使用Python读文件时经常遇到编码问题引起的错误,比如:

UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 30: illegal multibyte sequence

遇到这种异常时可以通过读文件时规定编码方式来解决,如下:

with open('zhengfu.txt','r',encoding='UTF-8') as read_zhengfu:

如果文件中还包含其他非UTF-8编码的字符,或者无关的特殊字符,可以再加入一个参数,如下:

with open('zhengfu.txt','r',encoding='UTF-8',errors='ignore') as read_zhengfu:

有时读文件时还会遇到一种问题就是第一行数据的开头多了一串‘'\ufeff’字符。比如:

如果用print(list[0])是看不到这个字符的。对这个没有研究过, 如果要去掉这串字符的话,可以使用‘utf-8-sig’这种编码方式:

with open('user_dict_2.txt','r',encoding='utf-8-sig') as read_dict:

但是我在写入文件时设置为‘utf-8-sig’格式时不起作用,写入的文件中还是有这个字符。

另外,在对字符串进行匹配的时候,'\ufeff’会影响字符串的匹配结果。

2.字符串编码

关于计算机内部如何表示字符串,为何又要创造这么多种编码方式,推荐阅读 https://www.cnblogs.com/hhwu/p/9529942.html 这篇博客里作者讲的很明白,这里主要是想汇总介绍Python中的字符串函数。

2.1 chr()函数和ord()函数

chr()函数是将一个整数返回一个对应的字符,ord()函数则相反,其返回一个字符的数值表示(返回的是Unicode值的十进制表示)。在Python3.6的版本中,chr()中整数的范围不再是0到255,扩大到了1114111,大于改值时,报ValueError错误。而ord()函数中只能接受单字符串作为其输入,否则会报TypeError错误。

print(chr(65)) #输出'A'

print(ord('A')) #输出65

2.2 Unicode编码

虽然Python 3的内存中Unicode来保存字符串,但为了节省内存,Python3内部使用3种方式存储Unicode字符。具体分为以下三种:

Latin-1一个字符占一个字节。比如ASCII码值UCS-2一个字符占两个字节。常见的中文都占用2个字节UCS-4一个字符占四个字节。比较偏僻的中文还有emoj表情通常占用4个字节。

python中提供了内置函数来查看每个字符串对象的编码类型。如果一个字符串的所有字符都能用ASCII码来表示,那么该字符串使用Latin-1。如果字符串中出现了中文,则采用UCS-2编码即可。如果字符串中有一些生僻字或者emoj表情的话,则必须使用UCS-4编码。注意在Python中,一个字符串中的所有字符只能采用一种编码方式,不能混用。因为一旦混用,那么字符串中每个字符所占的字节数必定不同,那么字符串将不能使用下标进行快速直接读取。下面来具体看看字符串具体在内存中所占用的字节数。

字符串的长度和该字符串所占的字节数不相同。字符串的长度可以直接通过len()f方法来求,而字符串在内存中实际所占的字节数需要通过getsizeof()函数来计算。

import sys

#返回字符串所占字节数,返回78

print(sys.getsizeof('你好'))

#返回字符串长度,长度为2

print(len("你好"))

从以下的实验结果可以发现,一个空字符串在内存中就占了49个字节的内存。

Python内存中的数据,不管是int型还是字符串,都会额外占用一些内存空间保存一些信息,这些信息保存了字符串的一些基础信息,并且能够决定字符串所能进行的操作。Python一般会为字符串分配49到80个字节的额外空间。

下面这段代码分别展示了字符‘a’在三种不用的Unicode编码中所占的字节数。

import sys

#latin-1编码时'a'所占的字节数,其结果为:1

print(sys.getsizeof('ab')-sys.getsizeof('b'))

#ucs-2编码时'a'所占的字节数,其结果为:2

print(sys.getsizeof('a你好')-sys.getsizeof('你好'))

#ucs-4编码时'a'所占的字节数,其结果为:4

print(sys.getsizeof('a?')-sys.getsizeof('?'))

[转载] python中字符串编码形式及其所占字节相关推荐

  1. [转载] Python中字符串切片详解

    参考链接: Python中的字符串切片 在python中,我们定义好一个字符串,如下所示. s = 'abcdefghijklmnop' 在python中定义个字符串然后把它赋值给一个变量.我们可以通 ...

  2. [转载] Python中字符串的处理方法

    参考链接: Python字符串方法1(find,rfind,startwith,endwith,islower,isupper,lower,upper,swapcase和title) 1.字符串 1 ...

  3. [转载] python判断字符串中包含某个字符串_干货分享| Python中最常用的字符串方法

    参考链接: Python中字符串string capitalize 字符串是字符序列.Python中内置的string类代表基于Unicode国际字符集的字符串.除了Python中常见的操作外,字符串 ...

  4. python中字符串

    目录 1.字符串 2.什么叫字符串驻留机制呢? 3.驻留机制的几种情况(交互模式) 4.sys中的intern方法强制2个字符串指向同一个对象 5.PyCharm对字符串进行了优化处理(所以上述两个例 ...

  5. Python中字符串的操作(图文详情)

    以下操作均在pycharm pycharm官方下载地址: https://www.jetbrains.com/pycharm/download/#section=windows 目录 python中字 ...

  6. Python中字符串的驻留机制和常用方法

    在python中字符串是基本数据类型,是一个不可变的字符序列. 字符串的驻留机制 使用三种不同的赋值方式赋值同一个字符串 a = 'python' b = "python" c = ...

  7. 站长在线Python精讲:Python中字符串编码转换encode编码和decode解码详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<Python中字符串编码转换:encode编码和decode解码详解>.本知识点主要内容有:常用编码简介.使用encode( ...

  8. python字符串前面加f什么意思_详解Python中字符串前“b”,“r”,“u”,“f”的作用...

    1.字符串前加 u 例:u"我是含有中文字符组成的字符串." 作用: 后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时 ...

  9. python中字符串切片取奇数_Python中的字符串切片(截取字符串)的详解

    Python中的字符串切片(截取字符串)的详解 字符串索引示意图 字符串切片也就是截取字符串,取子串 Python中字符串切片方法 字符串[开始索引:结束索引:步长] 切取字符串为开始索引到结束索引- ...

最新文章

  1. [Dijstra] 洛谷 P2939 改造路
  2. Hdu 4738 Caocao's Bridges (连通图+桥)
  3. 宝塔php安装那个合_通过宝塔面板一键搭建wordpress博客
  4. 基于墨刀的软件界面原型设计——小说搜索阅读软件
  5. Git 使用篇一:初步使用GitHub,下载安装git,并上传项目
  6. java验证码 memcache_java连接开启了sasl的memcache服务
  7. 使用jps来查看虚拟机状态
  8. ByWater Solutions支持在图书馆中使用开源
  9. JNDI学习总结(2)——JNDI数据源的配置
  10. 自己整理实现的python小工具
  11. 收藏 | 关于Mac Dock的10 个隐藏终端命令
  12. 关于判断卡BIN的修正
  13. Lattice Diamond 的安装以及license的获取
  14. 【科研绘图】Adobe illustrator加Origin组合绘图
  15. 离线维基百科全书阅读器(wikireader)
  16. MATLAB 的 colormap 函数详解
  17. 大型游戏后台实践浅谈
  18. Maxwell 转矩出现正负值情况解决措施
  19. while循环、方法(伟大的作品,不是靠力量而是靠坚持才完成的。)
  20. 如何下载河西区卫星地图高清版大图

热门文章

  1. kafka告警简单方案
  2. mount --bind的用处
  3. codesys com库_CoDeSys官方系统库在线下载,替换国内下载服务器教程
  4. linux python复制安装,复制一个Python全部环境到另一个环境,python另一个,导出此环境下安装的包...
  5. arima模型_[不说人话系列]-ARIMA模型
  6. 如何把密度函数化为标准正态二维分布_概率微课:第三章(22) 二维随机变量及分布函数定义...
  7. android 实例源码解释,Android Handler 原理分析及实例代码
  8. 后台使用orm多还是直接sql_Django应用app创建及ORM
  9. html高度没有滚动条,Div扩展了页面高度,但没有滚动条
  10. shell脚本单词去重多个文件