私はsqlite3
データベースを操作しており、mp3 から取得した特定の ID3 情報を選択しmutagen
て保存しています。曲にアクセントやその他の「外国語」文字が含まれている場合、単純にそれらを通常の Python 文字列として保存しようとすると、次のエラーが発生します。
sqlite3.ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory
that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended
that you instead just switch your application to Unicode strings.
したがって、データベースに保存するすべての文字列を Unicode にエンコードしました。
try: # store as unkown if no ID3 info
songtitle = unicode(audio["TIT2"].__str__(), errors="replace")
except KeyError:
songtitle = "Unknown"
try:
artist = unicode(audio["TPE1"].__str__(), errors="replace")
except KeyError:
artist = "Unknown"
try:
album = unicode(audio["TALB"].__str__(), errors="replace")
except KeyError:
album = "Unknown"
これにより、すべてのエラーが解消され、データベースにデータが正常に取り込まれるようになります。ただし、アクセントやその他の文字は表示されず、通常は疑問符、スペース、またはその他の文字化けした文字に置き換えられます。
ある種のエンコーディングを指定する必要があると思いますが、英語のエンコーディングなどとの互換性を損なうことなくそれを行う方法がわかりません。おわかりのように、エンコーディングに関する私の経験は最小限です。