大字符串和len()

时间:2012-11-16 14:44:40

标签: python string ascii

这可能是一个新手问题,但在这里。我有一个string(167572字节)的大ASCII和非ASCII字符。当我在字符串上使用len()时,我得到错误的length。似乎len()不计算0x0A个字符。我可以获得字符串实际长度的唯一方法是使用以下代码:

for x in test:  
   totalLen += 1   
for x in test:  
   if x == '\x0a':  
      totalLen += 1  
print totalLen  

len()有什么问题?或者我使用它错了吗?

2 个答案:

答案 0 :(得分:6)

您将编码的字节字符串与unicode文本混淆。例如,在UTF-8中,最多3个字节用于编码任何给定字符,在UTF-16中,每个字符使用至少 2个字节进行编码。

python字符串是一系列字节,要获得unicode,您必须使用适当的编解码器对字符串进行解码。例如,如果您的文本使用UTF-8编码,则可以使用以下方法对其进行解码:

test = test.decode('utf8')

另一方面,写入文件的数据始终编码,因此如果使用UTF-16编解码器写入,则长度为10的unicode字符串可能占用文件中的20个字节。 / p>

很可能你会对这些“更广泛”的字符感到困惑,而不是你的\n(ASCII 10)字符被正确计算。

请帮自己一个忙,阅读Unicode和编码:

答案 1 :(得分:4)

可能是你希望它包含\r\n,即ASCII 13(回车),然后是ASCII 10(换行),或者你将字符串写入一个字符串后查看字符串文本文件,添加这些?

很难具体,因为你没有提供很多细节,即字符串数据的来源。