Why java String.length gives a different result than python len () for the same string

I have a line like the following

("استنفار" 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 )

If I used a java string variable and counted the number of characters it gives me 923, but if I used a function lenfor python, it gave me 1514

What is the difference?

+4
source share
3 answers

It looks like in python (2.x) you are counting the byte length, not the number of characters.

Convert the byte string to a unicode object with str.decode, then count the characters:

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

You may also need to remove spatial spaces:

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
+8
source

, python (2.x). python (2.x) , python (3.x) unicode java. , python3

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

7, python2, 14

+2

If you use u "" before the string, which means unicode in python2.x, then you might get the same result with Java

+1
source

All Articles