【问题标题】:sqlite remove non utf-8 characterssqlite 删除非 utf-8 字符
【发布时间】:2011-04-04 22:53:33
【问题描述】:

我有一个 sqlite 数据库,里面有一些疯狂的 ascii 字符,我想删除它们,但我不知道如何去做。我用谷歌搜索了一些东西,发现有人说要在 mysql 中使用 REGEXP,但这会引发错误,说 REGEXP 无法识别。

这是我得到的错误:

sqlalchemy.exc.OperationalError: (OperationalError) Could not decode to UTF-8 column 'table_name' with text ...

感谢您的帮助

【问题讨论】:

  • 您确定要删除“疯狂”字符吗?学习如何处理所有 unicode 字符其实很有趣……
  • 那么它们是 ASCII 字符还是 UTF-8?由于您使用的是 SQLAlchemy,它已经可以很好地处理 UTF-8,但是一旦您获得它,您可能会对如何处理它感到困惑。 docs.python.org/howto/unicode.html
  • ~unutbu:取决于你对“有趣”的定义;)我当然会称之为“有用”和“最初令人生畏”,以及“值得”但“有趣”从未在我的脑海中浮现。
  • 我很想学习如何做,而且我讨厌做事,但我现在的截止日期很紧。任何帮助或建议将不胜感激。
  • 您需要显示更多代码。不要告诉我们它抛出了一个错误,告诉我们。

标签: python sqlite sqlalchemy ascii


【解决方案1】:

好吧,如果你真的想把一个丰富的 unicode 字符串硬塞进一个普通的 ascii 字符串 (并且不介意一些傻瓜),你可以使用这个:

import unicodedata as ud
def shoehorn_unicode_into_ascii(s):
    # This removes accents, but also other things, like ß‘’“”
    return ud.normalize('NFKD', s).encode('ascii','ignore')

如需更完整的解决方案(错误少一些,但需要第三方模块unidecode),see this answer

实际上,最好的解决方案是在整个代码中尽可能使用 unicode 数据,并仅在必要时才使用编码。

【讨论】:

  • 我实际上是在寻找一个我可以使用的 sql 语句然后我不必处理它。我实际上已经尝试过这个函数: def removeNonAscii(s): return "".join(i for i in s if ord(i)
  • @bababa:你能用像SELECT * from table 这样的简单SQL SELECT 语句画出文本吗?如果是这样,编写一次性脚本来读入数据并使用UPDATEs 写回 ascii 数据并不难......非常低俗,但权宜之计。
【解决方案2】:

django.utils.encoding 具有一组强大的 unicode 编码和解码功能。

【讨论】:

    猜你喜欢
    • 2011-12-04
    • 2018-01-23
    • 1970-01-01
    • 2018-01-05
    • 2014-12-19
    • 2020-06-01
    • 2011-02-21
    • 1970-01-01
    • 2013-06-21
    相关资源
    最近更新 更多