Juste pour clarifier certaines @Ignacio Vazquez-Abrams commentaires de. Lors du traitement ou de l'analyse de texte, vous ne devez pas vous soucier du nombre d'octets qu'un caractère donné occupe. C'est pourquoi vous sortez l'encodage de l'équation en décodant d'abord le texte codé dans une représentation texte/str séparée.
>>> encoded_text = 'hello world'.encode('utf16')
>>> encoded_text
b'\xff\xfeh\x00e\x00l\x00l\x00o\x00 \x00w\x00o\x00r\x00l\x00d\x00'
>>> type(encoded_text)
<class 'bytes'>
>>> len(encoded_text)
24
>>> decoded_text = encoded_text.decode('utf16')
>>> decoded_text
'hello world'
>>> type(decoded_text)
<class 'str'>
>>>
>>> len(decoded_text)
11
Je l'ai vu le UTF-16 code units
dans le code java que vous avez posté ...
Vous pourriez faire quelque chose comme ça pour obtenir le nombre d'octets depuis le début:
sentence = "Obama was born in the United States. But I was born in Alabama".encode('UTF-16LE')
word = 'United States'.encode('UTF-16LE')
bytes_from_start = None
for start_byte_position in range(len(sentence)):
candidate = sentence[start_byte_position: start_byte_position + len(word)]
if word == candidate:
bytes_from_start = len(sentence[:start_byte_position])
print('bytes from start: ', bytes_from_start)
print('len(sentence[:start_byte_position]): ', len(sentence[:start_byte_position]))
print('Preceding text: "{}"'.format(sentence[:start_byte_position].decode('UTF-16LE')))
break
Mais il est toujours pas clair si unités de code UTF-16 == octets. J'ai le sentiment qu'il ne veut vraiment que le nombre de caractères dès le départ. Et si c'est tout ce dont vous avez besoin, vous pouvez utiliser la méthode .index() de l'objet str:
sentence = "Obama was born in the United States. But I was born in Alabama"
word = 'United States'
characters_from_start = sentence.index(word)
Vous ne pouvez pas le décoder en premier pour utiliser du texte à la place? –
Je travaille avec du texte. Honnêtement, je ne peux pas comprendre comment il utilise les unités de code comme distance, ou comment obtenir cette distance –
Si vous avez besoin de vous soucier de l'encodage, alors vous travaillez avec des octets, pas de texte. –