在Unicode时代,Python字符串已被证明是处理文本的一种便捷方法。 在本文中,我们就来研究Python字符串是如何演化并能处理各类文本的,特别是窥视其幕后的运作方式。...例如,代码点U+01F193编码为“0x0001F193”。UTF-32的主要优点除了简单之外,还在于它是一种固定宽度的编码形式,即每个代码点对应于固定数量的代码单元(在本例中是1个代码单元)。...C标准库,它适用于8位固定宽度编码,不适用于UTF-8或任何其他Unicode编码。...,使用UCS-2编码在内部表示Unicode字符串,UCS-2能够对当时分配的所有代码点进行编码,但是,由于Unicode在BMP(Basic Multilingual Plane,基本多文种平面,UCS...灵活的字符串表示法允许在固定时间内索引到字符串中,同时试图让字符串保持相对紧凑。
若指定了非 SC 排序规则,则这些数据类型仅会存储 UCS-2 字符编码支持的字符数据子集。 nchar [ ( n ) ] 固定大小字符串数据。...对于 UCS-2 编码,存储大小为 n 个字节的两倍,并且可存储的字符数也为 n。...存储大小为 n 字节的两倍 + 2 个字节。 对于 UCS-2 编码,存储大小为 n 个字节的两倍 + 2 个字节,并且可存储的字符数也为 n。...然后我就猜测到是GBK编码问题,因为在python3里面字符串的默认编码也是Unicode,测试下把1006⁃267X(2020)02⁃0548⁃10转成GBK。 ?...同时在直接使用sql进行insert、update的时候注意在要保存为Unicode编码字符串前面加N。
因此,在Unicode引入了UTF-16编码方式之后,站在现代字符编码模型的角度上来看的话,再将UCS-2和UCS-4直接称之为字符编码方式CEF已不是很合适,更多的应该是编号字符集CCS中的概念(当然...(Surrogate Pair)(解释详见后文《UTF-16究竟是如何编码的——UTF-16的编码算法详解》) UTF-16编码方式及其代理机制是在Unicode 2.0中为支持字符编号超过U+FFFF...现在若有软件声称自己支持UCS-2编码,那相当于是在暗示其仅支持UCS字符集或Unicode字符集中的基本平面字符,而不能支持增补平面字符。 6....所以说,UTF-16是变长编码方式,每个字符编码为2字节或4字节;而UCS-2是定长编码方式,每个字符编码固定为2字节。...例如代码中的字符串,在内存中相应的字节流就是UTF-16字节序列的。(注意,UTF-16编码在Windows环境中被误用为“widechar”和“Unicode”的同义词) 8.
python中,我们使用decode()和encode()来进行解码和编码 在python中,使用unicode类型作为编码的基础类型。...好消息来了,对,那就是python3,在新版本的python3中,取消了unicode类型,代替它的是使用unicode字符的字符串类型(str),字符串类型(str)成为基础类型如下所示,而编码后的变为了字节类型...3、UCS-2、UCS-4、BMP UCS有两种格式:UCS-2和UCS-4。顾名思义,UCS-2就是用两个字节编码,UCS-4就是用4个字节(实际上只用了31位,最高位必须为0)编码。...或者说UCS-4中,高两个字节为0的码位被称作BMP。 将UCS-4的BMP去掉前面的两个零字节就得到了UCS-2。在UCS-2的两个字节前加上两个零字节,就得到了UCS-4的BMP。...UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。例如收 到一个“奎”的Unicode编码是594E,“乙”的Unicode编码是4E59。
本文涉及知识点: Unicode (BMP/SP) UTF-8 UTF-16 UTF-32 UCS-2 javascript字符处理 Unicode Unicode是目前绝大多数程序使用的字符编码,定义也很简单...常见的UTF有 UTF-8 可变字节序列,用1到4个字节表示一个码点 UTF-16 可变字节序列,用2或4个字节表示一个码点 UTF-32 固定字节序列,用4个字节表示一个码点 UTF-8对ASCⅡ编码是兼容的...如 UCS-2 用2个字节表示BMP的码点 UCS-4 用4个字节表示码点 UCS-2是一个过时的编码方式,因为它只能编码基本平面(BMP)的码点,在BMP的编码上,与UTF-16是一致的,所以可以认为是...UCS-4则与UTF-32等价,都是用4个字节来编码Unicode。 javascript字符处理 辣莫,js到底是用的啥编码呢?答案是UCS-2。咦,刚刚不是说UCS-2过时了吗?...我们经常用length来判断字符串长度,那产品不干了呀,说好可以输入10个字,为毛输了5个emoji就不给输入了? 怎么破?
简单来说:字符编码就是将字符映射为固定的码位值,存储在对应的编码字符集中。在不同的字符集中,同一个字符的码位不同。其中码位也有翻译成码点或者内码。...因此:一些程序在内部处理字符串时,就使用了另外一种编码方式 UTF-16,其中 JavaScript、Python 就使用了这种编码方式来存储字符串。...ẹ́'.normalize()] // ['ẹ', '́'] 13.4合成字符的大麻烦 上面提到关于 Unicode 的问题不仅限于 JavaScript,在 Python、Java 等语言中也会遇到。...虽然在 ES2018 中引入了 Unicode 属性转义符,但在浏览端上依然要考虑使用 XRegExp 来实现,当然可以考虑在服务端处理,因为 Python 3.6、Perl 5.24 、Ruby 2.4...3)字符编码形式(CEF, Character Encoding Form):从代码点到特定宽度(比如32-bit整数)的代码单元序列的映射。
用lxml库处理网页时遇到的,写个转换程序用用。...注:ASCII转unicode和中文转unicode是两个东西(起码在unicode在线转换网站上这两个不同),虽然说是中文,其实输入英文字母也没问题(表述可能不够准确,但大概是那么个意思)。...原理 常见的unicode编码格式如下: \u670d\u52a1\u5668 如果换成开头的格式如下: 服务器 其实这两个是同一个东西,只是开头和进制不同...编码字符串 # 输入中文,输出str类型的开头的unicode编码数据 def zh2uni(zhDat): rDat = "" for n in zhDat: rDat...编码字符串转中文 def uni2zh(uniDat): rDat = '' while True: if len(uniDat) == 0: break
例如Unicode中将“兒”和“”字安放在不同的码位里。在检索文献时,检索“兒”字时就找不到“雷庄”,检索“”字时就找不到“雷庄兒”,反而造成困扰。...UTF-32编码长度是固定的,UTF-32中的每个32位值代表一个Unicode码位,并且与该码位的数值完全一致。 UTF-32的主要优点是可以直接由Unicode码位来索引。...文件和网络数据往往是 UTF-16、UTF-8和传统字节编码的混合。 Python语言环境从2.0版本开始官方只在内部使用UCS-2,但UTF-8解码器到“Unicode”会产生正确的UTF-16。...Python 3.3不再使用 UTF-16,而是从ASCII/Latin-1、UCS-2和UTF-32中选择为给定字符串提供最紧凑表示的编码。...从ES2015开始,字符串方法和正则表达式标志已添加到语言中,允许从与编码无关的角度处理字符串。 PHP语言和MySQL也支持UCS-2。
python对多国语言的处理是支持的很好的,它可以处理现在任意编码的字符,这里深入的研究一下python对多种不同语言的处理。...有一点需要清楚的是,当python要做编码转换的时候,会借助于内部的编码,转换过程是这样的:原有编码 -> 内部编码 -> 目的编码 python的内部是使用unicode来处理的,但是unicode的使用需要考虑的是它的编码格式有两种...有一个办法,就是通过sys.maxunicode的值来判断: import sys print sys.maxunicode 如果输出的值为65535,那么就是UCS-2,如果输出是1114111就是UCS...“ print len(a), a # 把a编码为内部的unicode, 但为什么方法名为decode呢,我的理解是把gb2312的字符串解码为unicode b = look.decode(a) #...返回的b[0]是数据,b[1]是长度,这个时候的类型是unicode了 print b[1], b[0], type(b[0]) # 把内部编码的unicode转换为gb2312编码的字符串,encode
有一点需要清楚的是,当python要做编码转换的时候,会借助于内部的编码,转换过程是这样的:原有编码 -> 内部编码 -> 目的编码 python的内部是使用unicode来处理的,但是unicode的使用需要考虑的是它的编码格式有两种...有一个办法,就是通过sys.maxunicode的值来判断: import sys print sys.maxunicode 如果输出的值为65535,那么就是UCS-2,如果输出是1114111就是UCS...) # 创建utf-8编码器 look2 = codecs.lookup(“utf-8”) a = “我爱北京天安门” print len(a), a # 把a编码为内部的unicode, 但为什么方法名为...decode呢,我的理解是把gb2312的字符串解码为unicode b = look.decode(a) # 返回的b[0]是数据,b[1]是长度,这个时候的类型是unicode了 print b[1...], b[0], type(b[0]) # 把内部编码的unicode转换为gb2312编码的字符串,encode方法会返回一个字符串类型 b2 = look.encode(b[0]) # 发现不一样的地方了吧
""" @Author :叶庭云 @CSDN :https://yetingyun.blog.csdn.net/ """ 在利用 Python 将字典数据保存为 json 时,查看数据发现中文全部显示的为...Unicode 编码,如下所示: 分析原因: Python3已经将 Unicode 作为默认编码 Python3中的 json 库在做 dumps 操作时,会将中文转换成 Unicode 编码,并以...再做逆向操作时,会将 Unicode 编码转换回中文。...解决办法:在 dumps 设置参数 ensure_ascii=False 解决了问题,emmm,然后发现 Sublime Text 里显示中文乱码,顺便一起解决了: 调用Ctrl+Shift+P,或者点击...Preferences->Packet Control,然后输入:Install Package,回车: 在稍后弹出的安装包框中搜索:ConvertToUTF8或者GBK Support,选择点击安装
UTF-16UTF-16:从先前的固定宽度的 16 位编码(UCS-2)发展而来的,能够对 Unicode 的所有 1,112,064 个有效 code point 进行编码。...UTF-32与UCS-4: 在Unicode与ISO 10646合并之前,ISO 10646标准为“通用字符集”(UCS)定义了一种31位的编码形式(即UCS-4),其编码固定占用4个字节,编码空间为0x00000000...UTF-16与UCS-2: 除了UCS-4,ISO 10646标准为“通用字符集”(UCS)定义了一种16位的编码形式(即UCS-2),其编码固定占用2个字节,它包含65536个编码空间(可以为全世界最常用的...例:“汉”的UCS-2编码为6C49。...但俩个字节并不足以正真地“一统江湖”,于是UTF-16诞生了,与UCS-2一样,它使用两个字节为全世界最常用的63K字符编码,不同的是,它使用4个字节对不常用的字符进行编码。UTF-16属于变长编码。
例:“汉”的UCS-2编码为6C49。...除此之外ISO10646标准为“通用字符集”(UCS)还定义了一种31位的编码形式(即UCS-4),UCS-4全称UniversalCharacter Set coded in 4 octets,其编码固定占用...UCS-2只能编码“基本多语言平面”中的字符,此时UTF-16与UCS-2的编码一样(都直接使用Unicode的码位作为编码值),例:“汉”在Unicode中的码位为6C49,而在UTF-16编码也为6C49...可以在“语言与区域设置”中选择一个代码页作为非 Unicode 编码所采用的默认编码方式,如936为简体中文GBK,950为正体中文Big5(皆指PC上使用的)。...许多编程语言也采用Unicode为内码,如Java、Python3。 外码:除了内码,皆是外码。
ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。...方式 Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。 UTF-8 UTF-8以字节为单位对Unicode进行编码。...2)Unicode编码指的是UCS-2编码方式,即直接用两个字节存入字符的Unicode码。这个选项用的little endian格式。...Unicode规范中定义,每一个文件的最前面分别加入一个表示编码顺序的字符,这个字符的名字叫做”零宽度非换行空格“(ZERO WIDTH NO-BREAK SPACE),用FEFF表示。...传输过程中将汉字转换成UCS-2的unicode 4位16进制编码,接收后再转回来。 9.
“编码为UTF8”,顾名思义嘛—— 不过这时候有同学可能就要问了:等等,我们平时在项目中写代码时,用的已经是 UTF-8 编码了啊?...JavaScript 因历史原因,使用的是近似于 UTF-16 的 UCS-2 方案(编码中操作处理时表现为 UCS-2,浏览渲染显示时基于 UTF-16 重新显示为 Unicode 字符)。...所以,这个模块在 JavaScript 的字符串进行 MD5 计算前,“尝试”将 JS 引擎内的 UTF-16/UCS-2 格式的字符串先转换成了基于 UTF-8 格式表示的 Unicode 字符,再将其对应编码值进行...,位于几种编码的第一段区域时,表现格式其实差别不大: UTF-8 在第一段与 ASCII 码、Unicode 码点一致,占用1个字节; 而 UTF-16 和 UTF-32 相当于在高位补 0,分别占用2...基于 Unicode 码点操作 原本的 encodeUTF8 函数中通过 String.prototype.charCodeAt() 操作原始字符串,得到的是根据 UCS-2 计算的字长、相当于 UTF
U+0000 = null 上式中,U+表示紧跟在后面的十六进制数是Unicode的码点。 目前,Unicode的最新版本是7.0版,一共收入了109449个符号,其中的中日韩文字为74500个。...上面那些编码方法,JavaScript都不用。 JavaScript用的是UCS-2! 六、UCS-2编码 怎么突然杀出一个UCS-2?这就需要讲一点历史。...UCS的开发进度快于Unicode,1990年就公布了第一套编码方法UCS-2,使用2个字节表示已经有码点的字符。(那个时候只有一个平面,就是基本平面,所以2个字节就够用了。)...UTF-16编码迟至1996年7月才公布,明确宣布是UCS-2的超集,即基本平面字符沿用UCS-2编码,辅助平面字符定义了4个字节的表示方法。...因为在JavaScript语言出现的时候,还没有UTF-16编码。
还记得前面说到的Unicode的BMP吗,就是Unicode使用两字节来编码全球大部分文字字符的一个编码区间,号称0号平面,UCS-2是一个固定两字节长度的编码,每一个字符都采用一个单一的16位值来表示...那么UCS-2和Unicode的0好平面又是啥关系呢?其实UCS-2编码的字符和Unicode的BMP编码的字符是相同的,因此UCS-2就是Unicode的BMP。...一个字符的Unicode编码是确定的,但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对Unicode编码的实现方式有所不同,这就是为何已经存在了UCS-2和UCS-4,...在UCS编码中有一个叫做零宽度非换行空格(ZERO WIDTH NO-BREAK SPACE)的字符,它的编码是U+FEFF。而U+FEFF在UCS中是不存在的字符,所以不应该出现在实际传输中。...UCS规范建议我们在传输字节流前,先传输字符零宽度非换行空格字符。
因为即使你设置了MySQL的连接字符集为latin1,MySQL在执行HEX()函数时依然会使用Unicode编码将字符串转换为16进制表示。...由于UNICODE是多字节编码,在传输过程中需在字节序、容错性方面进行定义。基本可以认为 UTF16=UCS2,UTF-32=UCS4,这两种都是定长编码,即每个字符的编码都是固定长度的。...基于这些原因, 在文件名, 文本文件, 环境变量等地方, UCS-2 不适合作为 Unicode 的外部编码。外部编码指的是用于将Unicode字符存储到文件或通过网络发送的编码方式。...UCS-2(Universal Character Set 2)是一种固定长度(2字节)的Unicode字符编码方式,但它只能表示Unicode字符集中的前65,536个字符,无法表示更高的代码点,这就使得...因此,尽管UCS-2在一些情况下可能有用,但它通常不被推荐作为Unicode的外部编码,特别是在需要处理大量数据或需要兼容ASCII的场景中。
当python要做编码转换的时候,会借助于内部的编码,转换过程是这样的: 原有编码 -> 内部编码 -> 目的编码 python的内部是使用unicode来处理的,但是unicode的使用需要考虑的是它的编码格式有两种...有一个 办法,就是通过sys.maxunicode的值来判断: import sys print sys.maxunicode 如果输出的值为65535,那么就是UCS-2,如果输出是1114111...a # 把a编码为内部的unicode, 但为什么方法名为decode呢,我 的理解是把gb2312的字符串解码为unicode b = look.decode(a) # 返回的b[0]是数据...,b[1]是长度,这个时候的类型是unicode 了 print b[ 1 ], b[0], type(b[0]) # 把内部编码的unicode转换为gb2312编码的字符 串,encode方法会返回一个字符串类型...在Python中,codecs模块提供了实现这些规则的方法,通过模块公开的方法我们能够方便地获取某种编码方式的Encoder和 Decoder工厂函数(Factory function),以及StreamReader
从 Python 3 开始,str 类型代表着 Unicode 字符串。取决于编码的类型,一个 Unicode 字符可能会占 4 个字节,这个有些时候有点浪费内存。...出于内存占用以及性能方面的考虑,Python 内部采用下面 3 种方式来存储 Unicode 字符: 一个字符占一个字节(Latin-1 编码) 一个字符占二个字节(UCS-2 编码) 一个字符占四个字节...33 大部分语言文字使用 2 个字节(UCS-2)来编码就已经足够了。4 个字节(UCS-4)的编码在保存特殊符号、emoji 表情或者少见的语言文字的时候会用到。...Python 内部为什么不直接使用 UTF-8 编码 最常见的 Unicode 编码是 UTF-8,但是 Python 内部并没有使用它。...Python 的 unicode 对象的实现、大约有 16,000 行 C 代码,其中有很多小优化在本文中未提及。
领取专属 10元无门槛券
手把手带您无忧上云