Python 3 - количество букв в зашифрованной строке

Я хотел бы получить количество букв в данной строке. Однако len(txt) возвращает количество букв в форме Unicode (я думаю), но фактическое количество букв меньше, чем я получаю.

например:

txt = שלום וברכה
len(txt)   # returns something different then 10

Я видел решение для Python 2, используя string.decode, который не доступен в Python 3 - и я не уверен, что это правильный ответ для меня. Кстати, кодировка для строки cp862,

РЕДАКТИРОВАТЬ: более подробно: я читаю из текстового файла, используя

with open(path, "r",  encoding="cp862") as textFile:

это вывод строки, которую я читаю при печати

╫¬╫ñ╫¿╫ש╫ר ╫£╫ª╫ץ╫¥: ╫¢╫ת ╫¬╫ª╫£╫ק╫ץ ╫נ╫¬ ╫¢╫ש╫ñ╫ץ╫¿

Длина 52. Реальная линия: תפריט לצום: כך תצלחו את כיפור, а реальная - 29

1 ответ

Решение

Возможно, вы открываете файл с неправильной схемой кодирования, вот демонстрация:

>>> import sys
>>> sys.version
'3.4.3 (default, Oct 14 2015, 20:28:29) \n[GCC 4.8.4]'
>>> 
>>> s = '╫¬╫ñ╫¿╫ש╫ר ╫£╫ª╫ץ╫¥: ╫¢╫ת ╫¬╫ª╫£╫ק╫ץ ╫נ╫¬ ╫¢╫ש╫ñ╫ץ╫¿'
>>> len(s)
52
>>>
>>> s = s.encode('cp862').decode('utf-8')
'תפריט לצום: כך תצלחו את כיפור'
>>> len(s)
29

Попробуйте открыть его с кодировкой по умолчанию (utf-8).

Другие вопросы по тегам