在数据库中存储重音符号和其他字符

时间:2013-03-12 16:41:22

标签: python unicode encoding

我正在使用sqlite3数据库,从mp3中选择使用mutagen获取的某些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"

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

我认为我需要指定某种编码,但我不确定如何在不破坏与英文编码的兼容性的情况下如何做到这一点。我相信你可以说,我的编码经验是最小的。

0 个答案:

没有答案