Python学习笔记 (2.2)Python中的字符编码问题及标准数据类型之String(字符串)

Python3中的String类型

  首先,Python中没有字符类型,只有字符串类型。单个字符按照长度为1的字符串处理,这对于曾是OIER的我来说有点不适应啊。

  字符串的表示方法

    最常用的就是用一对双引号或一对单引号把一串字符括起来,像这样 'Hello world!' 或 "Hello world!" 。这两种表示方法可以说完全一样,没啥区别。这两种完全一样的东西存在的目的貌似只有一个,如果字符串中含有一个单引号,就要用双引号括起来,避免单引号匹配不起来,像这样 "I'm fine." 而不是这样 'I'm fine.' ,可以看到,第二种情况下,解释器就无法正确识别我们想要的字符串。再加一个相似的例子: '"Why," he said.' 和 ""Why," he said." 

字符编码

  参考资料:字符串和编码-廖雪峰的官方网站

  众所周知,计算机要处理字符,是通过字符编码。美国人发明了计算机,然后制定了由一个字节表示一个字符的ASCII编码,只有英文字母、数字、标点和一些控制字符,总共127个。

  但是这对其他语言来说就很不友好,因为放不下自己语言的字啊。于是各国都制定了自己的编码标准,比如中国的GB2312(国标2312)、GBK(国标扩),日本的Shift_JIS,等等。各国标准不同,就会出现冲突(乱码)。

  于是就产生了国际通用的编码标准Unicode(点我看Unicode),发展到如今,大多数由两个字节表示一个字,也有要4个字节的。它包括了全世界差不多所有字符。至于原来就在ASCII中的字符,在编码前面补零就好。

  但由于“补零”的存在,如果大部分是英文,Unicode储存时要耗费差不多两倍空间,于是储存时由Unicode转换为可变长编码的UTF-8以节约空间(1~6个字节表示一个字,中文大多是3字节),再次打开时,再转换回Unicode(Windows XP的记事本是这样的,win7记事本保存时就可以自己选编码方式了),网页也有这类似的应用。

  总结一下:计算机要处理非英文的字符,就要使用其他字符编码,如要处理中文,就要使用GB2312(只支持中文、英文)或Unicode、UTF-8(支持所有语言)。

  Ps:GBK和UTF-8并不兼容,于是在我刚开始折腾Ubuntu16.04时,发现在里面预装的rhythmbox中,我的音乐标题全是乱码,百度一下,在Ubuntu下处理好了,等重启回到win7时,win7又显示乱码了,解决方案:在Ubuntu下使用网易云音乐。还有当年去福建长乐一中集训,由于编码方式不兼容,我Ubuntu的文件用ftp传到他们那里,文件名只会显示乱码,导致我第一天没有成绩,解决方案:用Windows或Ubuntu下的ftp软件

Python3中的String(字符串)类型编码方式及其应用

  python3中,字符串类型默认使用Unicode,直接可以处理中文了,不像Python2,默认ASCII,要处理中文还要手动UTF-8。如果要更改编码方式,比如希望使用GBK,那么要加一行注释( 叫做编码声明 ) # -*- coding: gbk -*- 或 #coding=gbk (等号前后不能有空格),要放在第一行,如果第一行已经有了解析路径( #!/usr/bin/python3 ),那编码声明就要放在第二行。关于编码声明更详细的官方解释。再次强调,Unicode/UTF-8不与GBK兼容浣犲ソ锛屼笘鐣岋紒

上一篇:洛谷 P2813 母舰


下一篇:《Visual Basic 2012入门经典》----1.8 运行项目