Просто чтобы прояснить некоторые из комментариев @Ignacio Васкес-Абрамса. При обработке или анализе текста вы не хотите беспокоиться о том, сколько байтов занимает данный символ. Вот почему вы берете «кодировку» из уравнения, сначала «декодируя» кодированный текст в отдельное представление text/str.
>>> 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
Я действительно видел UTF-16 code units
в Java код, который вы публикуемую ...
Вы могли бы сделать что-то вроде этого, чтобы получить число байтов от начала:
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
Но это все еще неясно, если UTF-16 кодовые единицы == байт. У меня такое чувство, что на самом деле просто нужно количество символов с самого начала. И если это все, что вам нужно, вы можете использовать метод .index() объекта str объекта:
sentence = "Obama was born in the United States. But I was born in Alabama"
word = 'United States'
characters_from_start = sentence.index(word)
Вы не можете его декодировать первым, чтобы вместо этого работать с текстом? –
Я работаю с текстом. Я честно не могу понять, как он использует единицы кода как расстояние или как получить это расстояние. –
Если вам нужно заботиться о кодировке, вы работаете с байтами, а не с текстом. –