2017-03-07 4 views
1

だから、私はこの奇妙な問題は、 'æ'、 'ø'と 'å'をPythonで使用しています。Pythonのスカンジナビア語の文字(æøå)2.7

私が含まれています:# - - コーディング:ので、すべてのファイルの先頭に
、およびæøåプリント罰金が心配 - UTF-8から
を。しかし、もし私がlen('æ')をすれば、私は2を得る。私はループしてデンマークのテキストを分析するプログラムを作っているので、これは大きな問題である。私はislowerはの問題(周りを取得することができます

In [1]: 'a'.islower() 
Out[1]: True 

In [2]: 'æ'.islower() 
Out[2]: False 

In [3]: len('a') 
Out[3]: 1 

In [4]: len('æ') 
Out[4]: 2 

In [5]: for c in 'æ': print c in "æøå" 
True 
True 

In [6]: print "æøå are troublesome characters" 
æøå are troublesome characters 

)とisupper()は「æ」、「O」と「A」のために働いていない:以下 は、問題を説明するためのpython端子からのいくつかの例であります単にc.islower() or c in "æøå"を実行して、cが小文字であるかどうかを確認しますが、上記のように 'æ'の両方の部分は小文字としてカウントされ、二重にカウントされます。

これらの文字を他の文字と同じように動作させる方法はありますか?

私はsklearnとnumpyを取得する簡単な方法としてcanopyを使用してWindows 10でPython 2.7を実行します。

答えて

0

Python 2では、文字列がデフォルトではバイトであるという問題を遭遇しました。あなたのヘッダ#utf-8は、あなたのソースコードがutf-8であると解釈しただけですが、文字列の処理には影響しません。 islowerはとlenで

あなたの問題を解決するには、decodeメソッドとユニコードオブジェクトへのすべての文字列を変換することで、例えば

danish_text_raw = 'æ' # here you would load your text 
print(type(danish_text_raw)) # returns string 
danish_text = danish_text_raw.decode('utf-8') 
print(type(danish_text)) # returns <type 'unicode'> 

の問題は、修正する必要があります。プログラムで使用するすべての文字列がバイトオブジェクトではなくユニコードであることを確認してください。それ以外の場合は、奇妙な結果につながる可能性があります。例えば

danish_text_raw == danish_text # this yields false 

は確かにあなたが例えば完璧に動作し、それを

def to_unicode(in_string): 
    if isinstance(in_string,str): 
    out_string = in_string.decode('utf-8') 
    elif isinstance(in_string,unicode): 
    out_string = in_string 
    else: 
    raise TypeError('not stringy') 
    return out_string 
+0

感謝を確保するために、この機能を使用することができますUnicode文字列を使用することを確認します。すべてがちょうど英語であれば、迷惑をかけることはもっと簡単になります:) – Gnurgen

関連する問題