0

ファイル名の特殊文字を置き換える必要があります。私は今、翻訳でこれを試していますが、それはあまりうまく機能していません。あなたがこれを行うためのアイデアを得たことを願っています。明確なプレイリストを作成するために、iveは私の車にmp3の悪いプレーヤーを入れましたが、これはumlauteまたはspecialcharsを実行できません。

これまでの私のコード

# -*- coding: utf-8 -*-
import os
import sys
import id3reader
pfad = os.path.dirname(sys.argv[1])+"/"
ordner = ""

table = {
      0xe9: u'e',
      0xe4: u'ae',
      ord(u'ö'): u'oe',
      ord(u'ü'): u'ue',
      ord(u'ß'): u'ss',
      0xe1: u'ss',
      0xfc: u'ue',
    }
def replace(s):
return ''.join(c for c in s if (c.isalpha() or c == " " or c =="-") )
fobj_in = open(sys.argv[1])
fobj_out = open(sys.argv[1]+".new","w")

for line in fobj_in:
if (line.rstrip()[0:1]=="#" or line.rstrip()[0:1] ==" "):
    print line.rstrip()[0:1]
else:
    datei= pfad+line.rstrip()
    #print datei
    id3info = id3reader.Reader(datei)
    dateiname= str(id3info.getValue('performer'))+" - "+ str(id3info.getValue('title'))
    #print dateiname
    arrPfad = line.split('/')

    dateiname = replace(dateiname[0:60])
    print dateiname
#   dateiname = dateiname.translate(table)+".mp3"
    ordner = arrPfad[0]+"/"+dateiname
#   os.rename(datei,pfad+ordner)
    fobj_out.write(ordner+"\r\n")
fobj_in.close()

このエラーが発生します:UnicodeEncodeError:'ascii'コーデックは37桁目の文字u'\ xfc'をエンコードできません:序数が範囲内にありません(128) id3titleで変換を使用しようとすると、TypeErrorが発生します:文字バッファーが必要です物体

4

1 に答える 1

1

非ASCII文字を削除する必要がある場合は、次のコマンドをよく使用します。

>>> unicodedata.normalize("NFKD", u"spëcïälchärs").encode('ascii', 'ignore')
'specialchars'

これは、正規化されたUnicode分解のASCII部分に文字を変換しようとします。悪いことは、それが知らないものをすべて捨ててしまい、ウムラウトを音訳するほど賢くないということです(ue、aeなど)。

しかし、少なくともそれらのmp3を再生するのに役立つかもしれません。

もちろん、最初に自分で自由に実行しstr.translate、結果をこれでラップして、まだ残っているすべての非ASCII文字を削除できます。実際、あなたreplaceが正しければ、これはあなたの問題を解決します。str.translateとはいえ、ぜひご覧になることをお勧めしますstr.maketrans

于 2012-05-14T21:37:09.133 に答える