字符(串)转换ASCII码
鲁迅曾经说
没有被编码格式困扰过的程序员
注定留有遗憾
常言道
常在路上跑
哪能不摔倒
摔倒快起身
躺着睡更好
书归正传
躺归躺
闹归闹
决不能拿写代码开玩笑
毕竟我代码很大 健壮
你忍一下
~~~~~~~~~~~~~~优雅~~~~~~~~~~~~~~
一、ASCII码
首先熟悉下,什么叫ASCII码?想要直接看代码的小伙伴直接跳过,看第三部分。
ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符。
二、中文编码
ASCII码表示西文字符是用7位的ASCII码,为了在计算机中存储,最高位(第八位)默认为0,所以可以表示2的7次方个不同的字符;扩展的ASCII码,使用的第八位,不在默认为0,所以最多可以表示2的8次方个字符。
中文却不大一样。中文的一个汉字占16位,也就是两个字节的位置。编码方式跟ASCII码类似,但是为了与ASCII码区别开来,最高位默认为1。这里需要注意的一点是,部分编码格式,中文占三个字节。因此,如果含有中文,编码格式错误经常会导致乱码的发生。
国标码是 用于计算机之间或与终端之间信息交换时的汉字代码(GB2312,GBK,GB18030), 由连续的两个字节组成,每个字节七位有效,最高位为1。
正常汉字的显示处理也非常复杂:
三、编码转换
字符转换。字符的转换很简单,一般借助ord方法可以直接转换,转换的结果就是对应的ASCII码。中文的编码格式为Unicode,和UTF、GBK等一样,他也是一种编码方式。
接下来的代码以Python为例。
字符串转换。字符串的转换,就相对复杂一些。在Python3下,内存中默认编码方式为Unicode。Unicode编码类似于世界上的英语,是一种通用的编码方式,他可以表示所有的字符。
所以,如果全世界都是用Unicode编码的话,从此将不再有乱码问题。但是计算机中最重要的两种资源:时间和空间。全部使用Unicode编码,带来的空间消耗是ASCII编码的两倍。
本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间。
Python3中的字符串,是unicode,只能encode,所以无论如何打印都不会乱码,因为可以理解为从内存打印到内存,即内存->内存,unicode->unicode
str是unicode,当程序执行时,无需加u,str也会被以unicode形式保存新的内存空间中,str可以直接encode成任意编码格式,s.encode('utf-8'),s.encode('gbk')
所以,当使用不同编码方式去编码字符串的时候,可以看到不同编码方式转换的结果:
# -*- encoding:utf8 -*-
import string
str_test="西安"
print(str_test)
str_gbk = str_test.encode('gbk')
print(str_gbk)
str_utf8 = str_test.encode('utf8')
print(str_utf8)
编码格式互转:
# -*- encoding:utf8 -*-
import string
str_test="西安"
print(str_test)
str_gbk = str_test.encode('gbk')
print(str_gbk)
str_utf8 = str_test.encode('utf8')
print(str_utf8)
str_gbk = str_test.encode('gbk')
print(str_gbk.decode('gbk'))
str_utf8 = str_test.encode('utf8')
print(str_utf8.decode('utf8'))
写在最后,欢迎关注公众号【头发头发等等我】
另外,建了个微信群,除了打广告,什么都可以聊
更多推荐
所有评论(0)