我正在使用sqlite3
数据库,选择使用mutagen
从 mp3 获得的某些 ID3 信息并将其存储。当歌曲包含重音符号或其他“外来”字符时,如果我只是尝试将它们存储为常规 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"
这消除了所有错误并允许成功填充数据库。但是,它仍然不显示重音符号和其他字符,通常用问号、空格或其他乱码替换它们。
我假设我需要指定某种编码,但我不确定如何在不破坏与英语编码等兼容性的情况下做到这一点。我相信你可以告诉我,我的编码经验很少。