这可能是一个新手问题,但在这里。我有一个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()
有什么问题?或者我使用它错了吗?
答案 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(换行),或者你将字符串写入一个字符串后查看字符串文本文件,添加这些?
很难具体,因为你没有提供很多细节,即字符串数据的来源。