0

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

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

有什么问题len()?还是我用错了?

4

2 回答 2

6

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

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

test = test.decode('utf8')

另一方面,写入文件的数据总是经过编码,因此如果使用 UTF-16 编解码器写入,长度为 10 的 unicode 字符串可能会占用文件中的 20 个字节。

很可能您对这种“更宽”的字符感到困惑,而不是您的\n(ASCII 10)字符是否被正确计算。

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

于 2012-11-16T14:48:38.523 回答
4

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

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

于 2012-11-16T14:46:29.520 回答