为什么java String.length对于相同的字符串给出与python len()不同的结果

时间:2015-02-15 08:17:34

标签: java python string

我有一个像下面的字符串

("استنفار" OR "الأستنفار" OR "الاستنفار" OR "الإستنفار" OR "واستنفار" OR "باستنفار" OR "لستنفار" OR "فاستنفار" OR "والأستنفار" OR "بالأستنفار" OR "للأستنفار" OR "فالأستنفار" OR "والاستنفار" OR "بالاستنفار" OR "فالاستنفار" OR "والإستنفار" OR "بالإستنفار" OR "للإستنفار" OR "فالإستنفار" OR "إستنفار" OR "أستنفار" OR "إلأستنفار" OR "ألأستنفار" OR "إلاستنفار" OR "ألاستنفار" OR "إلإستنفار" OR "ألإستنفار") (("قوات سعودية" OR "قوات سعوديه" OR "القوات سعودية" OR "القوات سعوديه") OR ("القواتالسعودية" OR "القواتالسعوديه" OR "إلقواتالسعودية" OR "ألقواتالسعودية" OR "إلقواتالسعوديه" OR "ألقواتالسعوديه")("القوات السعودية" OR "إلقوات السعودية" OR "ألقوات السعودية" OR "والقوات السعودية" OR "بالقوات السعودية" OR "للقوات السعودية" OR "فالقوات السعودية" OR "وإلقوات السعودية" OR "بإلقوات السعودية" OR "لإلقوات السعودية" OR "فإلقوات السعودية" OR "وألقوات السعودية" OR "بألقوات السعودية" OR "لألقوات السعودية" OR "فألقوات السعودية") OR )

如果我使用java字符串变量并计算它给我的字符数923但是如果我使用python的len函数它给了我1514

这有什么区别?

3 个答案:

答案 0 :(得分:8)

似乎在python(2.x)中,你计算字节长度,而不是字符数。

使用str.decode将字节字符串转换为unicode对象,然后计算字符:

len(byte_string_object.decode('utf-8'))

您可能还需要剥离环绕空间:

len(byte_string_object.decode('utf-8').strip())

>>> len('استنفار')  # string (byte-string) literal
14
>>> len(u'استنفار')  # unicode literal
7
>>> len('استنفار'.decode('utf-8'))  # string -> unicode
7

答案 1 :(得分:2)

这是因为你正在运行python(2.x)。在python(2.x)中,默认情况下字符串是字节,而在python(3.x)中,默认情况下它们是unicode,与java相同。例如,如果打开python3解释器,并输入

len("استنفار")

如果您输入python2解释器的同一行,您将获得7

答案 2 :(得分:1)

如果您使用u""在字符串之前,这意味着python2.x中的unicode,那么你可能会得到与Java

相同的结果