【问题标题】:unicode in python turns into '\xXX\xXX'python中的unicode变成'\xXX\xXX'
【发布时间】:2011-11-02 02:51:22
【问题描述】:

我用的是 MySQLdb,我用的是:

cursor.execute(QUERY)

QYERY 在哪里:

INSERT (A,B,C) VALUES("%s","%s",something);'%(k1, u'W')**

w 是一个波斯字母(字面意思是!我只是将它替换为 W,以防您在查看波斯字母时遇到问题,它类似于 ب),并且 k1 是英文。但我明白了:

`Traceback (most recent call last):
  File "./i.py", line 47, in <module>
    c.doit(db)
  File "./i.py", line 41, in doit
    db.cr.execute('INSERT (A,B,C) VALUES("%s","%s",something);'%(k1, u'ب'))
  File "/usr/lib/pymodules/python2.7/MySQLdb/cursors.py", line 174, in execute
    self.errorhandler(self, exc, value)
  File "/usr/lib/pymodules/python2.7/MySQLdb/connections.py", line 36, in defaulterrorhandler
    raise errorclass, errorvalue
_mysql_exceptions.ProgrammingError: (1064, 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'(term_tit,term_desc,term_cat) VALUES("a\n","\xd8\xa8",general)\' at line 1')`

看到了吗? W字母变成“\xd8\xa8”怎么办?

更新:sql查询错误已修复,但\xd8\xa8问题依然存在, 现在从数据库中检索数据时,我得到“??????”而不是我输入的内容

【问题讨论】:

    标签: python unicode mysql-python


    【解决方案1】:

    您缺少INTO table_name 子句。这是我看到的唯一实际问题。

    ب 更改为\xd8\xa8 仅意味着您的Unicode 在通往数据库的途中被编码为UTF-8(这可能是您想要的)。 MySQL 使用\xXX 表示法(hexadecimalescape 序列;例如,\x20 表示 ASCII 空间)报告 UTF-8 编码字节,以提供全 ASCII 错误消息(可以是有点神秘,特别是如果你不习惯它,但这不是问题)。

    【讨论】:

      【解决方案2】:

      docs 建议通过使用占位符标记并让 Python 为您进行字符串替换来避免问题:

       db.cr.execute('INSERT (A,B,C) VALUES(?, ?,something)', (k1, u'W'))
      

      占位符标记主要用于防止injection attacks,但它们也负责正确转义字符串和处理编码问题。

      如果这有助于解决 unicode 替换问题,请告诉我。

      【讨论】:

        猜你喜欢
        • 2016-09-14
        • 2012-11-20
        • 2023-03-10
        • 2021-09-02
        • 1970-01-01
        • 2019-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多