这可能是一个新手问题,但在这里.我有一个大的string(167572字节),包含ASCII非ASCII字符和非ASCII字符.当我len()在字符串上使用时,我得到了错误length.似乎len()不计算0x0A字符.我可以获得字符串实际长度的唯一方法是使用以下代码:
for x in test:
totalLen += 1
for x in test:
if x == '\x0a':
totalLen += 1
print totalLen
Run Code Online (Sandbox Code Playgroud)
有什么问题len()?或者我使用它错了?
您将编码的字节字符串与unicode文本混淆.例如,在UTF-8中,最多3个字节用于编码任何给定字符,在UTF-16中,每个字符使用至少 2个字节进行编码.
python字符串是一系列字节,要获得unicode,您必须使用适当的编解码器解码字符串.例如,如果您的文本使用UTF-8进行编码,则可以使用以下方法对其进行解码:
test = test.decode('utf8')
Run Code Online (Sandbox Code Playgroud)
另一方面,写入文件的数据总是被编码,因此如果使用UTF-16编解码器写入,则长度为10的unicode字符串可能占用文件中的20个字节.
很可能你会对这些"更宽"的字符感到困惑,而不是你的\n(ASCII 10)字符被正确计算.
请帮个忙,阅读Unicode和编码: