首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Python字符串前世今生

为此,就要将每个字符映射到某个字节组成单元序列,这种映射称为字符编码。我们所用工具都要能够将文本字符编码为字节,还能够从字节中解码。这样才能实现文本内容呈现和存储。...这样序列称为Unicode字符串。这是进行文本处理适当抽象级别。然而,计算机代码点一无所知,因此必须将代码点编码为字节。...问题是,构成U+010000..U+10FFFF范围新代码点不能用16位代码单元表示。Unicode通过使用一16位代码单元(称为代理项每个新代码点进行编码,解决了这个问题。...这种编码形式使用一个16位代码单元U+0000..U+FFFF范围内代码点进行编码,并使用两个16位代码单元U+010000..U+10FFFF范围内代码点进行编码,因此被称为UTF-16。...字节序列本身不包含编码信息,例如,下面显示s,就是一个字节串(这是在Pytyhon 2.7中),而我们所使用终端是UTF-8编码,如果用print()函数打印这个字节串,即用UTF-8进行编码

1.2K10

UTF-8编码

相当于 Unicode 规定了字符对应代码值,这个代码值需要转换为字节序列形式,用于数据存储、传输。代码值到字节序列转换工作由 UTF-8 来完成。...可变长度字符编码:UTF-8 使用一至四个字节 Unicode 字符集中所有有效代码点进行编码。..."U+4E00",UTF-8 编码结果为 "e4 b8 80",中文字符 “一” 进行 UTF-8 编码,是如何得到 "e4 b8 80" 呢?...这样,可以快速读取和写入 UTF-8 编码字符。UTF-8 编码缺点UTF-8 编码不利于使用正则表达式进行读音检索正则表达式可以进行很多高级英文模糊检索。...但是 Unicode 汉字不是按读音排序,它是按部首排序,所以不利于用正则表达式进行读音检索。在只知道一个字部首而不知道如何发音情况下,UTF-8 可用正则表达式检索而 GBK 不行。

1.7K00

刨根究底字符编码之二——关键术语解释(下)

编号进行编码以形成码元序列,以及根据指定字符编码模式CES码元序列进一步编码以形成字节序列。...字符集里字符编号又是如何转换为计算机中字符编码(即码元序列)呢?别急,这里先记下这个概念,暂不深究,后文有详细解释。 4....而在Unicode这样现代、复杂字符编码系统中,字符编号不一定等于字符编码,字符编号与字符编码之间不一定是一个直接映射关系,比如UTF-8、UTF-16为间接映射,而UTF-32则为直接映射。...字符编码模式CES,也称作“序列化格式”(Serialization Format),指的是将字符编号进行编码之后码元序列映射为字节序列(即字节流),以便编码字符在计算机中进行处理、存储和传输。...六、总结一下现代字符编码模型: 对于Unicode这样现代字符编码系统来说,同一个字符因多个不同字符编码方式CEF(如UTF-8、UTF-16、UTF-32等)而具有多个不同码元序列(Code

39121

用python算法工程师们,编码问题搞透彻了吗?

但是,由于全世界字符比较多,导致表示码位数字也要用long或者int这样数据类型表示,每个字符都要占固定几个字节。在存储到磁盘或者通过网络进行传输时,比较浪费空间。...0x02 python3中码位和编码如何表示 在python3代码中,str类型对象就是用码位表示字符串, 编码字节序列可以用bytes类型对象表示。如下所示: ?...UnicodeEncoderError 当你用了某个编码器将unicode字符进行编码输出时,如果这个编码器中没有包含某些要编码unicode字符,就会发生UnicodeEncoderError。...简单讲就是在将unicode进行encode时发生了error UnicodeDecodeError 在将一个字节序列用指定解码器解码成unicode时,如果这个字节序列不符合解码器要求,就会发生UnicodeDecoderError...open()里面传入文件名给python,这时文件名是unicode字符串,python是用这个编码名字进行编码,转成字节序列后再去文件系统中查找。 如下所示,是我电脑上结果: ?

70020

干货 | iOS 程序员眼中 Emoji

但无论如何,各种编码方式 0~127 代表字符都建议与标准 ASCII 码中一样,达到兼容效果。 2....Unicode 是为了解决传统字符编码方案局限而产生,它为每种语言中每个字符设定了统一并且唯一二进制编码,以满足跨语言、跨平台进行文本转换、处理要求。...Unicode 一些概念 ① 字符集、码点 字符集(unicode)是一张码表,它规定了文字与数字一一应关系。 在设计字符集时,首先要决定所需字符数目,并确定所需字符清单。...当文本渲染器在字符z串中看到类似这样序列时,它将自动将变音符号堆叠在基本字母上方或下方,以创建一个组合字符。.../ 表示该范围起始位置 NSUInteger length;//表示该范围内长度 } NSRange; index 和 range 转换 苹果提供了一些 API 来他们进行转换

1.5K10

刨根究底字符编码之十——Unicode字符集编码方式以及码点、码元

由于Unicode字符集非常大,有些字符编号(码点值)需要两个或两个以上字节来表示,而要对这样编号进行编码,也必须使用两个或两个以上字节。...比如,汉字“严”Unicode码(Unicode码点值、Unicode编号)是十六进制数4E25,转换成二进制数有15位(100 1110 0010 0101),“严”这个字符编号进行编码的话,至少需要...表示其他更大编号字符,可能需要3个字节或者4个字节,甚至更多。 2. 这带来两个问题: 一是,如何才能区别Unicode字符和ASCII字符编码?...码元可理解为字符编码方式CEF(Character Encoding Form)码点值进行编码处理时作为一个整体来看待最小基本单元(基本单位)。 2. 为什么非要引入“码元”这个概念?...由于多字节数据类型数据在计算机存取时存在一个字节序问题,因此,UTF-16、UTF-32这两种编码方式所编码出来逻辑意义上多字节码元序列,在映射为物理意义上字节序列时,字节序列字节序因系统平台不同而不同

1.3K30

基础数据类型之Unicode编码简介

基础基础数据类型之Unicode编简介 编码含义 关于编码含义,之前也说过,计算机只能存储二进制序列 所以对于字符,保存时候,需要进行编码为二进制,进行存储 呈现时候,需要将二进制进行解码,转换成字符形式...,规定了符号对应二进制代码 至于这个二进制代码如何存储则没有任何规定,也就是说它是一种编码规定 是编码字符集,而不是实际编码方案 最初Unicode使用一个16位长度二进制序列,也就是最多支持...一个字符对应一个二进制序列 基本平面中使用四位十六进制数 在零号平面以外字符则需要使用五位或六位十六进制数了 编码方式 Unicode 没有规定字符对应二进制码在计算机中如何存储,只是规定了他值是多少而已...比如数字1 他码点是1 假如我用两个字节来存储,每个字节前两位我当做其他标志位, 设置为11 那么可能结果是这样11000000 11000001显然,他值并不是1 编码方式只是可以保证,你字符是按照指定字符集进行编码也就是说如果你告诉我拿出来码点为...替换掉x即可 字节序 根据我们上面描述utf8 以及utf16都有可能使用不止一个字节进行编码 其实还有很多其他数据也不仅仅是一个字节进行表达 在计算机中最终都是二进制序列形式 比如utf

92320

流畅 Python 第二版(GPT 重译)(二)

如何发现字节序列编码 如何找到字节序列编码?简短回答:你无法。你必须被告知。 一些通信协议和文件格式,比如 HTTP 和 XML,包含明确告诉我们内容如何编码头部。...接下来将对此进行解释。 BOM:一个有用小精灵 在示例 4-4 中,你可能已经注意到 UTF-16 编码序列开头有一额外字节。...⑪ 读取返回是字节,符合预期。 提示 除非需要分析文件内容以确定编码,否则不要以二进制模式打开文本文件——即使这样,你应该使用 Chardet 而不是重复造轮子(参见“如何发现字节序列编码”)。... Unicode 文本进行排序 Python 通过逐个比较每个序列项目来任何类型序列进行排序。对于字符串,这意味着比较代码点。...然后我们看到如何通过利用标准 locale 模块正确 Unicode 文本进行排序——带有一些注意事项——以及一个不依赖于棘手 locale 配置替代方案:外部 pyuca 包。

23900

短链接生成太无聊?试试看长链接生成,URL地址变成乐谱音符🎵

UTF-8数组 首先,我们要知道UTF-8是Unicode一种字节序列表示形式(编码方案),UTF-8将一个Unicode字符根据其码点转化为1-4个字节序列来存储和传输。...回到UTF-8,因为UTF-8为1-4个字节序列,所以可以用UTF-8数组来表示,比如你好世界: "你"字符Unicode码点是0x4F60,0x4F60在UTF-8编码为3个字节数字序列: [228..., 189, 160] "好"字符Unicode码点是0x597D,0x597D在UTF-8编码为3个字节数字序列: [229, 165, 189] 所以,"你好世界"每个字符UTF-8编码数组是...UTF-8编码规则,将码点转化为1-4个字节数字序列 把各个字节序列整合成一个数字数组 这样就完成了从字符串到UTF-8编码数组转换。...("/new/path", true); } 如果使用Nginx,可以直接激活NginxLua脚本,使用Lua脚本字符串进行编码转字符串解析后: location /old-path { rewrite

57380

Unicode入门介绍和学习总结

计算机友好最省事方式是用 32 (2^32 = 4 294 967 296 )位整数来存储编码点下标。这样做是可行但是每个字符用 4 个字节有点浪费。...当一个文字渲染器看到字符串中有这样序列时,它会自动堆叠变音符到基础字母上面或下面来造出一个组合字符。...8.形式正规化 要解决如何处理等值字符串问题,Unicode 定义了几种正规形式:是几种把字符串转化成规范形式方法,这样它们就可以被逐点比较(或按字节比较)。...还有个我没谈到是实现主题——如何有效存储和查找分布稀疏编码点数据,或着如何优化 UTF-8 解码、字符串比较和NFC 标准化。 Unicode 是个令人着迷复杂系统。...在字节和编码点之前有多映射,除此之外编码点和”字符”之间也有(某些情况下多多)多映射关系。在每个角落都有古怪特例。

1.1K10

Python学习(3):理解计算机中编码三、认识常见计算机编码

我们学习Python编程,经常字符串这样数据进行处理。我们也都知道计算机内部信息是采用二进制编码,那么这其中处理原理是什么呢?本篇就计算机中关于编码知识进行总结。...但是这样就产生了问题,对于一个很长二进制序列,我们很难理解它含义。...这种规定字符二进制序列做法就是一种编码行为,让计算机翻译就是一种解码行为。 这样也就产生了各种我们常见计算机编码,如:ASCll编码、UTF-8编码unicode编码等。...GB18030:再次GBK扩充,增加了日韩和少数民族字符编码。 5.unicode编码 如果每个国家都按照自己标准编码字符集,就会对编码不同两个国家交流造成很困难。...为了统一所有文字编码Unicode应运而生。 但是,UNicode仅仅只是一个字符集,就是为每个字符规定一个用来表示该字符二进制数字,至于这个二进制代码如何存储则没有任何规定。

72930

Unicode入门介绍和学习总结

计算机友好最省事方式是用 32 (2^32 = 4 294 967 296 )位整数来存储编码点下标。这样做是可行但是每个字符用 4 个字节有点浪费。...当一个文字渲染器看到字符串中有这样序列时,它会自动堆叠变音符到基础字母上面或下面来造出一个组合字符。...8.形式正规化 要解决如何处理等值字符串问题,Unicode 定义了几种正规形式:是几种把字符串转化成规范形式方法,这样它们就可以被逐点比较(或按字节比较)。...还有个我没谈到是实现主题——如何有效存储和查找分布稀疏编码点数据,或着如何优化 UTF-8 解码、字符串比较和NFC 标准化。 Unicode 是个令人着迷复杂系统。...在字节和编码点之前有多映射,除此之外编码点和”字符”之间也有(某些情况下多多)多映射关系。在每个角落都有古怪特例。

1.5K10

JSON 序列化中转义和 Unicode 编码

本文比较完整地整理一下 JSON 编码转义,以及 JSON Unicode 编码处理。 其实这是我上一篇文章姊妹篇。...当 JSON 进行序列化操作时(Go 中称为 marshal),根据 JSON 标准说明,需要对字符串中以下字符进行转义: 符号 名称 转义后字符串 " 双引号 \"...其实大部分情况下,UTF-8 已经成为现代编程语言约定俗成标准了,因此在 JSON 序列化时,只要简单地 Unicode 字符值转为二进制然后按照网络字节序打包就可以了。...取 lo 等于做了减法之后 u 低10位:lo = u & 0x003FF 高位加上 0xD800 后进行 \u 编码 低位加上 0xDC00 后进行 \u 编码 举例说明:代表地球颜文字符号 “...原文标题:JSON 序列化中转义和 Unicode 编码 发布日期:2020-05-09 原文链接:https://cloud.tencent.com/developer/article/1625557

9.3K51

看不见Unicode码让敏感词轻松逃过审核,谷歌IBM都中招

丰色 发自 凹非寺 量子位 报道 | 公众号 QbitAI Unicode码作为全世界文字统一编码,使用范围广,用它去NLP模型做对抗攻击,可谓中招一大片。 就比如下面这个谷歌翻译: ?...使用UnicodeNLP模型进行对抗攻击 事实上,这种情况在真实场景中并不少见,通过在输入文本中插入一些看不见Unicode进行对抗攻击,就有可能骗过AI语言处理系统去做一些“坏事”。...如何防止此类情况发生 来自英国剑桥大学和加拿大多伦多大学研究人员发现了上述机器学习模型中输入文本处理这一问题,在今年6月发表一篇论文中进行了阐述。 ?...他们通过包括微软谷歌旗下等在内商业系统进行对抗攻击发现: 通过一次不可察觉编码注入——比如一个不可见字符、同形符、重新排序或删除操作字符——攻击者可以显著降低一些模型性能,而经过三次注入,大多数模型都可能在功能上失灵...一些NLP模型无法处理具有不同编码控制序列或看起来相似的字母。 在具体过程中,NLP管道会将文本token化之后注释掉它不认识token,这一步差异也就是造成问题出现主要原因。

84940

刨根究底字符编码之十三——UTF-16编码方式

而UCS-2,是早期遗留下来历史产物。 UCS-2将字符编号直接映射为字符编码(CEF,而非CES,详见前文中现代字符编码模型解释),亦即字符编号就是字符编码,中间没有经过特别的编码算法转换。...后来,随着Unicode联盟与ISO/IEC就创建全球统一单一通用字符集进行合作,Unicode字符集与UCS字符集逐渐相互融合,两者最终基本保持了一致(详见前文《刨根究底字符编码之八——Unicode...(Surrogate Pair)(解释详见后文《UTF-16究竟是如何编码——UTF-16编码算法详解》) UTF-16编码方式及其代理机制是在Unicode 2.0中为支持字符编号超过U+FFFF...例如代码中字符串,在内存中相应字节流就是UTF-16字节序列。(注意,UTF-16编码在Windows环境中被误用为“widechar”和“Unicode同义词) 8....UTF-16一方面使用变长码元序列编码方式,相较于定长码元序列UTF-32算法更复杂(甚至比同样是变长码元序列UTF-8也更为复杂,因为引入了独特代理这样代理机制);另一方面仍然占用过多字节

93341

你真的知道Python字符串是什么吗?

预告一下,下一篇《你真的知道Python字符串怎么用吗? 》将会展开介绍,敬请期待…… 字符串序列是一种不可变序列,这意味着它不能像可变序列一样,进行就地修改。...Unicode编码其实是一个二进制字符集,它建立了从书写字符映射成唯一数字字符关系,但是,由于各系统平台字符理解差异,以及出于节省空间考虑,Unicode编码还需要再做一次转换,转换后二进制数字才能作为实际存储及网络传输时编码...,这样就简洁多了。...b'A'.decode('utf-8') >>> 'A' 总结一下,Python 3 中字符串是由Unicode码点组成不可变序列,也即是,由采用Unicode标准编码字符组成不可变序列。...通过跨语言比较,也许我们能加深一个事物(字符串)理解,还可能受到启发,得到“编程语言”及“编程哲学”领悟。 由于本人才疏学浅,本文就只对两点皮毛特性作说明,欢迎读者斧正和补充。

61830

【拓展】谈谈字符编码Unicode编码与emoji表情编码

码位只规定了一个字符对应数值,并没有规定这个数值如何存储,视编码方案不同有不同存储方式。 像ASCII这样简单编码方式,其码位值就是存储时字符实际上存储值,因此不需要特别强调这个概念。...但后面我们会看到,Unicode编码中每个码位值会对应许多中不同存储方案,不同码位用几个字节存储也会有变化。所以需要理解码位和字符一一应关系,知道这个码位值不受存储方案干扰。...Unicode标准规定U+D800 - U+DFFF值不对应于任何字符。后面可以看到,UTF-16就巧妙地利用了这一段空白区域进行编码转换。...这就导致定界问题,如何确定到底用几个字节来表示一个字符呢?这是Unicode标准没有指明。涉及到具体存储光看Unicode编码无法解决问题,如何存储还需要另外方案。...最常用基本平面中字符存储空间进行了压缩,使得汉字只需要两个字节就可以存储。

6.8K42

Go字符串 【Go语言圣经笔记】

文本字符串通常被解释为采用UTF8编码Unicode码点(rune)序列,我们稍后会详细讨论这个问题。...有好处也有坏处吧,大多数人都已经习惯了字符串操作都会产生新字符串,个人觉得Go这样目的主要是支持切片。)...在第八版本Unicode标准里收集了超过120,000个字符,涵盖超过100多种语言。这些在计算机程序和数据中是如何体现呢?...而且即使是常用字符也远少于65,536个,也就是说用16bit编码方式就能表达常用字符。但是,还有其它更好编码方法吗? UTF-8 UTF8是一个将Unicode码点编码为字节序列变长编码。...如果是将一个[]rune类型Unicode字符slice或数组转为string,则它们进行UTF8编码: fmt.Println(string(r)) // プログラム 将一个整数转型为字符串意思是生成以只包含对应

38720
领券