python获取字段长度,Python 获取字符串长度
对于这个问题,我先尝试了百度和谷歌,结果都不尽如人意。可以说两者都无法准确获得或者很难获得。如果字符串只包含中文就可以了。包含4个字节的emoji表情符号字符怎么办?还有人说是用正则表达式来获取,但是Unicode标准还在发展和扩展,兼容性有限。
我的想法是,既然一个字符最多占4个字节,那么把所有字符都转换成4个字节的字符是不够的,也就是UTF-32编码。
每个人都常用UTF-8编码,在Windows编程中可能还会用到UTF-16。估计很少用UTF-32。和UTF-8一样,也是Unicode的一种编码方式,只是一个字符占用32位(4字节),这里就不赘述了。如果你不知道,你可以自己做。
将字符串转换成UTF-32也很简单。像其他编码转换一样,它需要先转换成Unicode,然后再转换成UTF-32:
s= .
Us=s.decode(utf8) #或gbk
u32s=us.encode(utf32 )
因为python在转换成UTF-32(可以通过编解码器查看)后默认会在头中添加4字节BOM。BOM_UTF32),长度要减去BOM的长度:
l=len(u32s)/4-1
顺便说一下,头BOM可以删除,python可以处理这种情况,比如:
U32s=u32s[4:] #从标题中删除BOM
Us=u32s.decode(utf32) #仍然可以正确处理
转换成UTF-32后,也可以方便地进行其他字符串处理,比如之前比较难的分段,只要以4字节为单位进行分段,然后就可以转换回原来的编码。
提供一个精确的字符串到列表的函数,将一个字符串一个一个地分成字符:
def str2list(s,编码=utf8 ):
如果不是isinstance(s,unicode):
s=s .解码(编码)
s=s.encode(utf32)[4:]
return [s[i*4:i*4 4]。xrange(len(s)/4)中I的解码( utf32 )
最后,python3解决方案不错!Python3已经原生支持3字节和4字节的Unicode字符,len()和list()可以正确处理!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。