2

我正在使用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.

因此,我将要存储在数据库中的所有字符串编码为 un​​icode:

            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"

这消除了所有错误并允许成功填充数据库。但是,它仍然不显示重音符号和其他字符,通常用问号、空格或其他乱码替换它们。

我假设我需要指定某种编码,但我不确定如何在不破坏与英语编码等兼容性的情况下做到这一点。我相信你可以告诉我,我的编码经验很少。

4

0 回答 0