请问如何方便地统计字符串长度?

网上很多方法都是字数,比如word里头的word count,UltraEdit的状态栏,我试了好长时间了。我要的是我们刚刚学习计算机时说的标准,一个中文占两个字符,中文标点也是占两个,英文字母数字占一个字符,空格、回车英文标点也是一个字符。
我在这里先感谢大家了。

这里必须设定一个标签,没办法我选了python,大家随意发挥啊。

如果是gbk编码,那么一个中文字符占用两个字节,一个英文字符占用一个字节。如果是utf-8编码,那么一个中文包含繁体字等于三个字节,一个英文字符等于一个字节。如果是gbk编码,那么一个中文包含繁体字等于两个字节... ”


>>> a='abcd,你好'
>>> len(a)    
7
>>> len(a.encode('gbk'))
9

我试了俩例子,你可以按这个来,统计地时候记得减一下哈。

img

获取字符串的长度,然后遍历字符串,用一个计数,每一个都用sizeof计算,加起来求和就可以了。

length函数统计

python的默认字符集是UTF-8,常规思路是,程序代码通过正则匹配Unicode编码范围,把汉字的个数统计出来,然后再为每个中文字符长度+1。
不过我发现还有一种更简单的方法,仅仅通过减法就能准确算出汉字的长度。
代码示例

按照一个汉字为两个字符计数


def chn_length(text):

if text is None:

return 0

lenText = len(text)

lenText_utf8 = len(text.encode('utf-8'))

# utf-8一个汉字占3个字符,减去原计数就是多出来的2/3,再除以2就是增量。再加回去即可

size = int((lenText_utf8 - lenText) / 2 + lenText)

return size

a = '你好啊123'

print(chn_length(a))

# 结果
# 9

讲解
首先把目标字符串的长度计算出来,由于python默认utf8编码,一个汉字占1个字符,故此时长度(lenText)为6;
显式的,以UTF8编码,转成python字节码,这时每个汉字会占3个字符。那我们再次计算长度(lenText_utf8)为12,即3(汉字个数) x 3 + 3(字母个数);
lenText_utf8 - lenText 得出的结果就是utf8格式下,多出来的字符数,也就是每个汉字额外占用的2个字符的空间;
由于每一个汉字都额外占用2个字符,那我们可以给这些额外长度除以2,也就得出了每个汉字只额外占用1个字符的差量;
把差量和lenText相加,就得到了我们需要的,一个汉字占2个字符的结果。

用什么语言啊?我会cpp的winapi或者mfc,你可以创建一个控件,把文本复制进去,调用GetWindowText,最好用ascii的版本,然后调用普通的字符串长度计算函数就行。


抱歉,我想复杂了,你直接复制到txt里面,写一个程序读取文本内容然后计算长度就行。只不过这样肯定不如第一种方便。