2011-02-08 29 views
1

私はそのMP3タグから曲のアーティストを読み、その名前に基づいてフォルダを作成します。私が持っている問題は、名前に 'AC \ DC'のような特殊文字が含まれている場合です。だから私はそれに対処するためにこのコードを書いた。私は今に実行しています何python:文字列内の特殊文字の置換

def replace_all(text): 
    print "replace_all" 
    dictionary = {'\\':"", '?':"", '/':"", '...':"", ':':"", chr(148):"o"} 

    for i, j in dictionary.iteritems(): 
     text = text.replace(i,j) 

    return text 

はモーターヘッドでumlaout 0またはブルーオイスターカルトのような英語以外の文字をどのように扱うかです。ご覧のとおり

私は辞書の終わりにumlaout 0のASCII文字列バージョンを追加しようとしたが、それは、私は両方の入力テキストのUnicodeを使用することをお勧めして文字を置き換え

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 4: ordinal not in range(128) 
+1

http://farmdev.com/talks/unicode/ –

+0

も参照してください。http://stackoverflow.com/questions/3833791/python-regex-to-convert-non-ascii-characters-in-a-string-より一般的な解決策の議論のために最も近いasciiに相当する。 – Mikel

+0

@Ignacioそれは素晴らしいリンクです!それはたくさんの助けになりました。 – ccwhite1

答えて

3

私はこのコードを見つけましたが、私はそれを理解していません。

def strip_accents(s): 
    return ''.join((c for c in unicodedata.normalize('NFD', s) if unicodedata.category(c) != 'Mn')) 

提案されたディレクトリ/ファイル名のパスからアクセント記号を削除することができました。

+0

も私も理解しています。 –

0

で失敗しました。あなたの例では、chr(148)は明らかにユニコードシンボルではありません。

+0

その中にユニコード文字を持つ文字列をどのようにして、文字列全体をユニコードに設定するのですか?そしてそれをして文字列の非ユニコード文字に変更しますか? – ccwhite1

+0

ISO-8859-1やUTF-8などの特定のエンコーディングでは、単純な文字列(バイト/バイナリ文字列)を使用している可能性があります。そのエンコーディングから、PythonのUnicodeデータ型( 'utext = text.decode( 'utf-8')')にデコードする必要があります。 –

関連する問題