ascii ->char chr()
======================================================================
#Python字符串操作
'' '1.复制字符串' ''
#strcpy( sStr1, sStr2)
sStr1 = 'strcpy'
sStr2 = sStr1
sStr1 = 'strcpy2'
print sStr2
'' '2.连接字符串' ''
#strcat( sStr1, sStr2)
sStr1 = 'strcat'
sStr2 = 'append'
sStr1 + = sStr2
print sStr1
'' '3.查找字符' ''
#strchr( sStr1, sStr2)
sStr1 = 'strchr'
sStr2 = 'r'
nPos = sStr1. index( sStr2)
print nPos
'' '4.比较字符串' ''
#strcmp( sStr1, sStr2)
sStr1 = 'strchr'
sStr2 = 'strch'
print cmp( sStr1, sStr2)
'' '5.扫描字符串是否包含指定的字符' ''
#strspn( sStr1, sStr2)
sStr1 = '12345678'
sStr2 = '456'
#sStr1 and chars both in sStr1 and sStr2
print len( sStr1 and sStr2)
'' '6.字符串长度' ''
#strlen( sStr1)
sStr1 = 'strlen'
print len( sStr1)
'' '7.将字符串中的小写字符转换为大写字符' ''
#strlwr( sStr1)
sStr1 = 'JCstrlwr'
sStr1 = sStr1. upper( )
print sStr1
'' '8.追加指定长度的字符串' ''
#strncat( sStr1, sStr2, n)
sStr1 = '12345'
sStr2 = 'abcdef'
n = 3
sStr1 + = sStr2[ 0: n]
print sStr1
'' '9.字符串指定长度比较' ''
#strncmp( sStr1, sStr2, n)
sStr1 = '12345'
sStr2 = '123bc'
n = 3
print cmp( sStr1[ 0: n] , sStr2[ 0: n] )
'' '10.复制指定长度的字符' ''
#strncpy( sStr1, sStr2, n)
sStr1 = ''
sStr2 = '12345'
n = 3
sStr1 = sStr2[ 0: n]
print sStr1
'' '11.字符串比较,不区分大小写' ''
#stricmp( sStr1, sStr2)
sStr1 = 'abcefg'
sStr2 = 'ABCEFG'
print cmp( sStr1. upper( ) , sStr2. upper( ) )
'' '12.将字符串前n个字符替换为指定的字符' ''
#strnset( sStr1, ch, n)
sStr1 = '12345'
ch = 'r'
n = 3
sStr1 = n * ch + sStr1[ 3: ]
print sStr1
'' '13.扫描字符串' ''
#strpbrk( sStr1, sStr2)
sStr1 = 'cekjgdklab'
sStr2 = 'gka'
nPos = - 1
for c in sStr1:
if c in sStr2:
nPos = sStr1. index( c)
break
print nPos
'' '14.翻转字符串' ''
#strrev( sStr1)
sStr1 = 'abcdefg'
sStr1 = sStr1[ : : - 1]
print sStr1
'' '15.查找字符串' ''
#strstr( sStr1, sStr2)
sStr1 = 'abcdefg'
sStr2 = 'cde'
print sStr1. find( sStr2)
'' '16.分割字符串' ''
#strtok( sStr1, sStr2)
sStr1 = 'ab,cde,fgh,ijk'
sStr2 = ','
sStr1 = sStr1[ sStr1. find( sStr2) + 1: ]
print sStr1
首先要搞清楚,字符串在Python内部的表示是unicode编码.
因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。
decode的作用是将其他编码的字符串转换成unicode编码,
如str1.decode('gb2312'),表示将gb2312编码的字符串转换成unicode编码。
encode的作用是将unicode编码转换成其他编码的字符串,
如str2.encode('gb2312'),表示将unicode编码的字符串转换成gb2312编码。
在某些IDE中,字符串的输出总是出现乱码,甚至错误,其实是由于IDE的结果输出控制台自身不能显示字符串的编码,而不是程序本身的问题。
如在UliPad中运行如下代码:
s=u"中文"
print s
会提示:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)。
这是因为UliPad在英文WindowsXP上的控制台信息输出窗口是按照ascii编码输出的(英文系统的默认编码是ascii),而上面代码中的字符串是Unicode编码的,所以输出时产生了错误。
将最后一句改为:print s.encode('gb2312') 则能正确输出“中文”两个字。
若最后一句改为:print s.encode('utf8') 则输出:/xe4/xb8/xad/xe6/x96/x87,
这是控制台信息输出窗口按照ascii编码输出utf8编码的字符串的结果。
另外,代码中字符串的默认编码与代码文件本身的编码一致,
如: s='中文' 如果是在utf8的文件中,该字符串就是utf8编码,如果是在gb2312的文件中,则其编码为gb2312。这种情况下,要进行编码转换,都需要先用decode方法将其转换成unicode编码,再使用encode方法将其转换成其他编码。
通常,在没有指定特定的编码方式时,都是使用的系统默认编码创建的代码文件,在这篇文章中可以看到如何获得系统的默认编码。
如果字符串是这样定义: s=u'中文' 则该字符串的编码就被指定为unicode了,即python的内部编码,而与代码文件本身的编码无关。
因此,对于这种情况做编码转换,只需要直接使用encode方法将其转换成指定编码即可。
如果一个字符串已经是unicode了,再进行解码则将出错,
因此通常要对其编码方式是否为unicode进行判断:
isinstance(s, unicode) #用来判断是否为unicode