大字符串和len()

0 python string ascii

这可能是一个新手问题,但在这里.我有一个大的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()?或者我使用它错了?

Mar*_*ers 6

您将编码的字节字符串与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和编码: