2016-07-25 10 views
-1

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

, например:

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

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

EDIT: более подробно: Я читаю из текстового файла с помощью

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

это выходной линии я прочитал, когда я печатаю это

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

Длина 52. Настоящая строка: תפריט לצום: כך תצלחו את כיפור и настоящая длина 29

+1

На repl.it Я получаю:> len ("שלום וברכה") => 10. Возможно, вы могли бы предоставить более подробную информацию о своей платформе и версии python. – Yegers

+0

Я получаю это: '>>> len ('שלום וברכה') >>> 10' – IsaacDj

+0

По крайней мере, предоставить действительный действительный код для воспроизведения проблемы. Этот образец даже не синтаксически не действителен. – deceze

ответ

0

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

>>> 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).

+0

Спасибо! это работает. –

+0

@RonU ... Если вы довольны этим ответом ... подумайте о принятии его. –