python字符串

字符串

这里说的是python3.x 用2.x的可以换文章了

  • 先了解一下字符的编码
    所谓字符的编码就是说在计算机中数据都是通过1和0来表示的,必须规定一种规则规定各种电码(即由1和0组成的串码)表示的是什么意思,这也是在计算机中经常使用二进制的原因之一吧。那么最早期的字符串编码方式是美国标准信息交换码也就是大名鼎鼎的ASCII,这种编码的编码方式仅仅能表示10个数字、26个大小写英文字母以及一些其他符号进行编码。ASCII编码规定每8位表示一个字符,易知这种编码方式最对只能表示28=256种字符(其中包括空格、换行、换页、删除、推格、振铃等字符)。但是随着信息技术的发展和信息交换的需要,计算机需要表示更多的字符因此用于显示本国的语言,不同的国家地区制定了不同的标准,由此产生了GB2312(GBK编码兼容这种GB2312编码方式,就是对其的一种扩展所以叫GB K(扩展的拼音首字母)),BIG5,JIS等各自的编码标准。这些使用2个字节来代表一个字符的各种字符延伸编码方式称为ANSI编码,又称MBCS(多字节字符集)。比如中文是GB2312为中文编码方式,日文的是JIS编码方式。这样导致了一个问题,同一个编码在不同的编码体系中代表着不同的文字,这应该就是小时候经常打开手机(还是功能机。。。)的时候经常会乱码的问题之一。因此有催生了unicode(这里要解释一下下,为什么那些研发的不能一次研发到位?其中一个原因跟硬件的限制有关吧,那时候的内存还放不下这么大的字符集,有人可能会说内存放不下可以暂存虚拟内存里面啊,再不济放到硬盘里面需要的时候调度一下下就好了。大概说明一下,那时候你确定有多进程调度?再者那时候内存速度都不快硬盘更慢这样显示一个东西光调用字符集都用了好长时间还用电脑么,此外那时候还没有现在的计算机网络没那么大的需要让计算机支持那么多的语言。所以这个玩意就一点一点发展切慢慢看吧,打字累了瞎扯一下)对于unicode就是所有编码转换的中间介质。所有的编码都加了一个转换器(程序)可以转换到unicode,而unicode也可以转换到其他所有编码。Unicode固然统一了编码方式,但是它的效率不高,比如UCS-4(Unicode的标准之一)规定用4个字节存储一个符号,那么每个英文字母前都必然有三个字节是0,这对存储和传输来说都很耗资源。

UTF-8!!!!!!这个东西就是为了提高unicode的编码效率,为什么说unicode的编码效率低,看完UTF-8可能就知道了。UTF-8可以根据不同符号自动选择编码的长短比如英文字母用一个字节就够了但是有一个问题,编码其他字符的时候会用更多的空间,比如汉子就用3个字节来表示,这玩意有缺点,但是效率还是高,因为装个unicode就够了不用再想unicode那样要知道源码用的是哪种编码方式,转码的时候还要知道要转成那种编码,这种方式就需要不断的切换字符集,这是unicode效率低而utf-8效率高的原因之一剩下的有兴趣看一下这个 https://baike.baidu.com/item/UTF-8/481798?fr=aladdin 关于编码扯的有点多了。。。

在python3.x中需要用#conding 显式地指定字符串编码

#coding=GBK
#coding=utf-8
#coding=unicode

如果发现输出的时候完全看不懂或者明显感觉有问题,这种谜之bug(在python2.x中不转换编码方式就会出现乱码的状况,看一下是不是版本装错了!)用decode()和encode()方法转换一下编码方式就可以。decode的作用是将其他编码的字符串转换成unicode编码,encode的作用是将unicode编码转换成其他编码的字符串,因此,转码的时候一定要先搞明白,字符串str是什么编码,然后decode成unicode,然后再encode成其他编码.

str=‘123456abc’
str.decode(‘gb2312’)#将gb2312编码的字符串转换成unicode编码
str.encode(‘utf-8’)#将unicode字符串转换成utf-8编码字符串
isinstance(s,unicode)#结果为false

字符串编码默认情况下使用系统默认编码(代码中字符串的默认编码与代码文件本身的编码一致)查看方式如下:

  • 在python环境中:

    str.class#这里面的class是__class__ 不知道这里面的转义字符是哪个。就在注释里面注明出来了!

  • 在windows环境下:

其实还是用python,这种方式是直接在命令行下的方式

#!/usr/bin/env python
	#coding=utf-8
	import sys
	printsys.getdefaultencoding()

注意结果在xp下显示的结果为:utf-8
在win7下显示为:mbcs

在UliPad中运行如下代码:
s=u"中文"
print s
会提示:UnicodeEncodeError:‘ascii’ codec can’t encode characters in position 0-1: ordinal notinrange(128)。这是因为UliPad在英文WindowsXP上的控制台信息输出窗口是按照ascii编码输出的(英文系统的默认编码是ascii),而上面代码中的字符串是Unicode编码的,所以输出时产生了错误。
此部分的内容可以参考一下内容
(https://blog.csdn.net/qq_40134903/article/details/80710882)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值