2016-07-25 16 views
-1

与えられた文字列の文字数を取得したいと思います。 しかし、len(txt)はユニコード形式の文字数を返しますが、実際の文字数は少ないです。例えばPython 3 - エンコードされた文字列の文字数

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

私は、Python 3では利用できませんstring.decodeを使ってPython 2のためのソリューションを、見た - と私はそれが私のために適切な答えはわかりません。 ところで、文字列のエンコーディングはcp862です。

EDIT:詳細: 私は私はそれは長さが52

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

ある

印刷するとき、これは私が読んラインの出力である

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

を使用してテキストファイルから読み込みます実際の行は次のとおりです:תפריטלצום:כךצצוחואתכיפור 実際の長さは29

+1

repl.itで入手できます:> len( "שלוםוברכה")=> 10.おそらく、あなたのプラットフォームとPythonのバージョンに関する詳細を提供することができます。 – Yegers

+0

私はこれを得ます: '>>> len( 'שלוםוברכה') >>> 10' – IsaacDj

+0

少なくとも、問題を再現するための実際の有効なコードを提供します。このサンプルは構文的にも有効ではありません。 – deceze

答えて

0

おそらく、 uは間違ったエンコーディングスキームでファイルを開いています。ここにデモンストレーションがあります:

>>> 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 ...あなたがこの答えに満足しているなら...それを受け入れることを検討してください。 –

関連する問題