编写高质量Python代码的59个有效方法--第三条:了解bytes、str与unicode的区别 Python3有两种表示字符序列的类型:bytes和str,这也是Python3最重要的特性之一...前者的实例包含原始的8位值;后者的实例包含Unicode字符。 Python2也有两种表示字符序列的类型:分别叫做str和unicode。...与python3不同的是,str的实例包含原始的8位值;而unicode的实例,则包含unicode字符。 把unicode字符表示为二进制数据(也就是原始8位值)有许多种办法。...最常见的编码方式就是utf-8。但是对于python3的str和python2的unicode实例都没有和特定的二进制编码形式相关联。...这种办法既可以令程序接受多种类型的文本编码,又可以保证输出的文本信息只采用一种编码形式。 一篇写的很好的对于编码的解释的博客(包括发展历史):浅析Python3中的bytes和str类型
如下: (1)char str[] = "happy"; (2)char *str = "happy"; 这种方式有什么不同呢?...下面看两个例子:修改字符串中的字符 示例1: #include int main(void) { char str[20] = "hello"; str[0] = 'H';..."hello"; str[0] = 'H'; printf("%s\n",str); return 0; } 运行结果: 无打印信息输出 可见,使用(1)方式定义的字符串其字符是可以修改的,...(2)中可以成功编译和链接,但运行时可能会出现错误,我编译与运行的平台是window10平台,运行结果是无打印信息输出,在其他不同的平台运行可能会出现段错误(Segment Fault)或者写入位置错误...这两种表示字符串的方式的主要区别是:字符串指针指向的内容是不可修改的,字符数组是可以修改的,即(2)方式定义的字符串保存在常量区,是不可更改的,(1)方式定义的字符串保存在全局数据区或栈区,是可修改的。
要弄清Unicode与UTF-8的关系,我们还得从他们的来源说起,下来我们从刚开始的编码说起,直到Unicode的出现,我们就会感觉到他们之间的关系 一、ASCII码 我们都知道,在计算机的世界里,...为了保持与ASCII码的兼容性,一般最高为为0时和原来的ASCII码相同,最高位为1的时候,各个国家自己给后面的位(1xxx xxxx)赋予他们国家的字符意义。...Unicode就相当于一张表,建立了字符与编号之间的联系 它是一种规定,Unicode本身只规定了每个字符的数字编号是多少,并没有规定这个编号如何存储。...下面我们来具体看看具体的Unicode编号范围与对应的UTF-8二进制格式 那么对于一个具体的Unicode编号,具体怎么进行UTF-8的编码呢?...首先找到该Unicode编号所在的编号范围,进而可以找到与之对应的二进制格式,然后将该Unicode编号转化为二进制数(去掉高位的0),最后将该二进制数从右向左依次填入二进制格式的X中,如果还有X未填,
前言 因为Java的跨平台性,为适应不同的操作系统,因此Java采用Unicode编码字符集,更具体的来说Java虚拟机(JVM)是采用的UTF-16编码。...区别 编码:ASCII码 大小:1个字节 语言:英语 Unicode编码 大小:2个字节(生僻字4个) 语言:所有语言 扩展 UTF-8编码 大小:1-6个字节,英文字母1个字节,汉字3个字节,生僻字4...-6个字节 语言:所有语言 Unicode编码 Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。...为了统一所有文字的编码,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。...所以,本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。
要弄清Unicode与UTF-8的关系,我们还得从他们的来源说起,下来我们从刚开始的编码说起,直到Unicode的出现,我们就会感觉到他们之间的关系 一、ASCII码 我们都知道,在计算机的世界里,...为了保持与ASCII码的兼容性,一般最高为为0时和原来的ASCII码相同,最高位为1的时候,各个国家自己给后面的位(1xxx xxxx)赋予他们国家的字符意义。...例如:“马”的Unicode是U+9A6C。 Unicode就相当于一张表,建立了字符与编号之间的联系 ?...所以它的格式为110XXXXX 10XXXXXX 。 下面我们来具体看看具体的Unicode编号范围与对应的UTF-8二进制格式 ?...首先找到该Unicode编号所在的编号范围,进而可以找到与之对应的二进制格式,然后将该Unicode编号转化为二进制数(去掉高位的0),最后将该二进制数从右向左依次填入二进制格式的X中,如果还有X未填,
>>> a = 10 >>> type(str(a)) >>> type(repr(a)) 但是这二者之间有什么区别呢?...造成这两种输出形式不同的原因在于: print 语句结合 str() 函数实际上是调用了对象的 __str__方法来输出结果。...而 print 结合 repr() 实际上是调用对象的__repr__方法输出结果。下例中我们用 str 对象直接调用这两个方法,输出结果的形式与前一个例子保持一致。 >>> print('123'....__str__()) 123 不过这个例子可能还是无法很好表达到底 str() 与 repr() 各有什么意义,我们再来看一个例子。...因此 str() 与 repr() 的不同在于: str() 的输出追求可读性,输出格式要便于理解,适合用于输出内容到用户终端。
转自:链接 python的str,unicode对象的encode和decode方法 python中的str对象其实就是"8-bit string" ,字节字符串,本质上类似java中的byte[]...unicode是有点差别的,对我们几乎透明,可不考虑),和人交互的时候用str对象。...奇怪的是,unicode也有decode,而str也有 encode,到底这两个是干什么的。...用处1 str本身已经是编码过的了,如果再encode很难想到有什么用(通常会出错的) 先解释下这个 str.encode(e) is the same as unicode(str).encode...str对象正好 是ascii编码的(ascii这一段和unicode是一样的),也应该让他成功。
问题一: 将u’\u810f\u4e71’转换为’\u810f\u4e71′ 方法: s_unicode = u’\u810f\u4e71′ s_str = s_unicode.encode(‘unicode-escape...’).decode(‘string_escape’) 问题二: 将’\u810f\u4e71’转换为u’\u810f\u4e71′ 方法: s_str = ‘\u810f\u4e71’s_unicode...= s_str.decode(‘unicode-escape’) 补充知识:Python最简单的解决列表中只打印UNICODE而不是中文字符的方法 答案就是用json模块: 例如: import...,但列表中的unicode数据不会。...以上这篇python将unicode和str互相转化的实现就是小编分享给大家的全部内容了,希望能给大家一个参考。
总的来说 str():将传入的值转换为适合人阅读的字符串形式 repr():将传入的值转换为 Python 解释器可读取的字符串形式 传入整型 # number resp = str(1) print(...resp, type(resp), len(resp)) resp = str(1.1) print(resp, type(resp), len(resp)) resp = repr(1) print...resp, type(resp), len(resp)) resp = repr(1.1) print(resp, type(resp), len(resp)) # 输出结果 1 1 1.1 3 1 1 1.1 3 传入字符串 # string resp = str("test") print...'> 4 'test' 6 repr() 会在原来的字符串上面加单引号,所以字符串长度会 +2
python的str,unicode对象的encode和decode方法 python中的str对象其实就是"8-bit string" ,字节字符串,本质上类似java中的byte[]。 ...python内部的表示和真实的unicode是有点差别的,对我们几乎透明,可不考虑),和人交互的时候用str对象。 ...奇怪的是,unicode也有decode,而str也有 encode,到底这两个是干什么的。 ...用处1 str本身已经是编码过的了,如果再encode很难想到有什么用(通常会出错的) 先解释下这个 str.encode(e) is the same as unicode(str).encode...str对象正好 是ascii编码的(ascii这一段和unicode是一样的),也应该让他成功。
要把Unicode数据转换成二进制数据,必须调用str的encode方法。 要把二进制数据转换成Unicode数据,必须调用bytes的decode方法。...(b'foo'))) print(repr(to_bytes('bar'))) 在Python中使用原始的8位值与Unicode字符串时,有两个问题要注意。...第一个问题是,bytes与str这两种类型似乎是以相同的方式工作的,但其实例并不相互兼容,所以在传递字符序列的时候必须考虑好其类型。 可以用+操作符将bytes添加到bytes,str也可以这样。...'r', encoding='cp1252') as f: data = f.read() assert data == 'ñòóôõ' 这样程序就不会出现异常了,但返回的字符串也与读取原始字节数据所返回的有很大区别...要点 bytes包含的是由8位值所组成的序列,str包含的是由Unicode码点所组成的序列。
长度也是一个字节,前 0~127 与 ASCII 一致,剩下的128个字符大多是欧洲语言所使用的字符,所以可以认为ISO 8859-1是为欧洲语言所定制的一套编码标准。...3.1 unicode unicode使用4字节共32个二进制位,为每个字符都确定了一个唯一的编码,由于整体搜索空间庞大,实际使用的量比较少。所以将整体分为了17组,叫做字符平面。...from wiki: 部分0号平面的分布: 3.2 字符码与字符编码解耦 强映射的问题 传统编码中,字符码与字符编码是完全绑定的,例如在ASCII中,'a’的字符码是97,'a’的字符编码也是97。...但缺点是不灵活,每个字符码编码出的结果是固定的,如果存在这样一个场景:unicode四个字节中,英文字母只占很少的一部分,如果客户只使用英文,unicode中永远只有1个字节的数据是有意义的,剩下三个字节都没用到...unicode将字符码与编码解耦 在unicode中,每一个字符保证有唯一字符码,将 字符码到存储二进制之间的“字符编码”过程独立出来,提供了三种编码方法: UTF-8:使用1或2或3或4个字节。
在我的某个程序中需要将数据保存成numpy数组,数组中每个元素又必须是字符串的格式 但是当你输入dtype=numpy.str的时候,你会发现又三个相近的数据类型可选,那就是str、str_和string..._了,如下图 str自然不用说,看后面就知道,builtins也就说明了这个str其实是python的内建数据类型,跟numpy数组一点关系都没有。...所以我们将目光锁定到后面为dtype的str_和string_上,我是比较懒的人,不喜欢去翻文档,也比较注重实践检验真理,所以在这里我会通过一系列的对比来区别开这两个数据类型。...对比3,字符串拼接 运行结果: 这里我只运行了arr1中元素跟字符串的拼接结果,并且是成功的,充分说明了str_就应该是dtype中真正对应python里str的那种类型,而arr2就没必要去测试了...---- 综合来说,我还是会选择str_类型去操作这些数据的,你们呢?
但世界上有许多不同的语言,所以需要一种统一的编码。 Unicode Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。...Unicode最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode。...Unicode和ASCII的区别 ASCII编码是1个字节,而Unicode编码通常是2个字节。...新的问题:如果统一成Unicode编码,乱码问题从此消失了。但是,如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。...用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件: ?
2:str和unicode转换 utf8样例: ‘asdasd’.decode(‘utf8’) 原理: 简单说来就是,python内部表示字符串用unicode(其实python内部的表示和真实的unicode...是有点差别的,对我们几乎透明,可不考虑),和人交互的时候用str对象。...s.decode ——–>将s解码成unicode,参数指定的是s本来的编码方式。这个和unicode(s,encodename)是一样的。...u.encode ——–>将unicode编码成str对象,参数指定使用的编码方式。...的汉字编码,用decode转换成utf8.然后与后半部分原本就是unucode进行对比 原创文章,转载请注明: 转载自URl-team 本文链接地址: python 中文编码 小结 ,json读写,str
3.什么是UNICODE Unicode与ASCII一样也是一种字符编码方法,它占用两个字节(0000H—FFFFH),容纳65536 个字符,这完全可以容纳全世界所有语言文字的编码。...4.使用UNICODE的好处 使用Unicode 编码可以使您的工程同时支持多种语言, 使您的工程国际化。即在不同语言的系统下不至于产生乱码。...上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。 这被称为ASCII码,一直沿用至今。 ASCII码一共规定了128个字符的编码。...Unicode的问题 Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。 这里就有两个严重的问题,第一个问题是,如何才能区别Unicode和ASCII?...它们造成的结果是: 1)出现了Unicode的多种存储方式,也就是说有许多种不同的二进制格式,可以用来表示Unicode。 2)Unicode在很长一段时间内无法推广,直到互联网的出现。
本地化过程中涉及到源文件和目标文件的传输问题,这时候编码就显得很重要。中文的网页和操作系统中通常采用ANSI编码,这也是微软OS的一个字符标准。...但不同的ANSI编码在不同语言之间是不兼容的,所以对于不同的操作系统之间文件的传输,或者在同样的操作系统下,源文件语言不同于OS的语言文件的传输,需要转换成UT8格式。...具体区别: ANSI:16384个字符。这就是ANSI字符标准。...英文一个字节,中文两个字节 UNICODE: 使用两个字节对世界上几乎所有的语言进行编码(0x0000-0xFFFF),65536个字符,每种语言的代码段不 同,两个字节(英文、中文都是两个字节)所表达的字符是唯一的...,所以不同语种可以共存于文本中,解决国际化的问题 UTF8是Unicode一种压缩形式,英文A在unicode中表示为0x0041,老外觉得这种存储方式太浪费,因为浪费了50%的空间,于是就把英文压缩成
上个月,我做了一次分享,详细介绍了Unicode字符集,以及JavaScript语言对它的支持。下面就是这次分享的讲稿。 一、Unicode是什么?...二、UTF-32与UTF-8 Unicode只规定了每个字符的码点,到底用什么样的字节序表示这个码点,就涉及到编码方法。 最直观的编码方法是,每个码点使用四个字节表示,字节内容一一对应码点。...越是常用的字符,字节越短,最前面的128个字符,只使用1个字节表示,与ASCII码完全相同。...三、UTF-16简介 UTF-16编码介于UTF-32与UTF-8之间,同时结合了定长和变长两种编码方法的特点。 它的编码规则很简单:基本平面的字符占用2个字节,辅助平面的字符占用4个字节。...一种是带附加符号的单个字符,即一个码点表示一个字符,比如Ǒ的码点是U+01D1;另一种是将附加符号单独作为一个码点,与主体字符复合显示,即两个码点表示一个字符,比如Ǒ可以写成O(U+004F) + ˇ(
上个月,我做了一次分享,详细介绍了Unicode字符集,以及JavaScript语言对它的支持。下面就是这次分享的讲稿。 !...目前,一共有17个(25)平面,也就是说,整个Unicode字符集的大小现在是221。...[](/blogimg/asset/2014/bg2014121104.png) ## 二、UTF-32与UTF-8 Unicode只规定了每个字符的码点,到底用什么样的字节序表示这个码点,就涉及到编码方法...**UTF-8是一种变长的编码方法,字符长度从1个字节到4个字节不等。**越是常用的字符,字节越短,最前面的128个字符,只使用1个字节表示,与ASCII码完全相同。...## 三、UTF-16简介 UTF-16编码介于UTF-32与UTF-8之间,同时结合了定长和变长两种编码方法的特点。 它的编码规则很简单:基本平面的字符占用2个字节,辅助平面的字符占用4个字节。
num = "1" #unicode num.isdigit() # True num.isdecimal() # True num.isnumeric() # True num = "1"...数字,byte数字(单字节),全角数字(双字节),罗马数字 False: 汉字数字 Error: 无 isdecimal() True: Unicode数字,,全角数字(双字节) False:...unicodedata.decimal("2") # 2 unicodedata.numeric("2") # 2.0 unicodedata.digit(b"3") # TypeError: must be str..., not bytes unicodedata.decimal(b"3") # TypeError: must be str, not bytes unicodedata.numeric(b"3") #...TypeError: must be str, not bytes unicodedata.digit("Ⅷ") # ValueError: not a digit unicodedata.decimal
领取专属 10元无门槛券
手把手带您无忧上云