如何在Python 3中复刻Python 2风格的Unicode字符串len()函数?
复刻Python 2风格的Unicode字符串len()函数(Python 3实现)
没问题,这事儿其实很好解决——Python 2里对Unicode字符串的len()本质是把字符串按系统默认编码(绝大多数场景下是UTF-8)转成字节序列后,计算字节的数量,我们在Python 3里直接复刻这个逻辑就行。
核心实现代码
def py2_len(s): # 默认采用UTF-8编码,对应Python 2中绝大多数场景的默认行为 return len(s.encode('utf-8'))
测试验证
运行下面的代码就能看到和Python 2一致的结果:
print(py2_len("애정")) # 输出6,和Python 2中len(u"애정")的结果完全匹配
为什么不用sys.getsizeof()?
你说得完全对,sys.getsizeof()根本不是正确的解决方案——它返回的是Python字符串对象在内存中的总占用大小,包含了对象的元数据(比如引用计数、类型信息等额外开销),和字符串写入磁盘时的字节数没有关系,所以肯定不能用它来实现需求。
拓展:适配非UTF-8编码场景
如果你的Python 2环境默认编码不是UTF-8(比如部分中文系统默认用GBK),只需要修改encode()方法的参数为对应的编码即可,比如:
def py2_len_gbk(s): return len(s.encode('gbk'))
内容的提问来源于stack exchange,提问作者Ian McKenzie
相关产品推荐
相关产品推荐

