【问题标题】:How to conserve the integrity of the string from a database response using Python如何使用 Python 从数据库响应中保存字符串的完整性
【发布时间】:2011-02-18 04:16:58
【问题描述】:

我正在使用py-postgreSql作为驱动程序数据库,当用非ASCII字符做一个select到一个字符串时,响应用“�”替换字符,我可以将其更改为正确的字符?

这是我的代码:

class decodify:

    def __init__(self):
        db = pgDriver.connect(user = 'demo', password='demo' database='hidura_karinapp', host='localhost', port='5432')
        d = db.prepare("""SELECT modules_reg.code FROM modules_reg, domain_reg, sbdomain_reg, sbdomdl_asc where(modules_reg.id = sbdomdl_asc.module AND modules_reg.mdname = 'police' AND sbdomain_reg.id = sbdomdl_asc.domain AND sbdomain_reg.domain = domain_reg.id AND domain_reg.dname = 'bmsuite.com' AND sbdomain_reg.sbname = 'www')""")
        s = d()
        print(s)

if __name__ == '__main__':
    decodify()

【问题讨论】:

  • Ppl 感谢一切,问题出在处理数据并将其发送到服务器的 JS 上,现在我必须在那里修复,但谢谢!!!

标签: python postgresql unicode python-3.x


【解决方案1】:

您是否设置了 client_encoding ?理论上 py-postgresql 应该自动使用正确的client_encoding。要么你把它设置错了,要么它检测它的方式有问题,在这种情况下你必须设置它。那么问题是什么。 :)

【讨论】:

  • 在 Postgresql 上,client_encodig 是 utf8,我没有更改 postgres 上的 client_encoding
【解决方案2】:

您在数据库中使用什么字符编码?检查你的 postgresql.conf 文件中的 client_encoding 设置,看看它是否也是 utf-8。

【讨论】:

  • 是的,使用 utf-8 编码,因为 db 支持驱动程序不支持的字符。
【解决方案3】:

我所做的是将 Python 默认编码设置为与数据库编码相同的技巧。我的数据库是 UTF-8,所以我必须像这样启动顶级脚本:

#!/usr/bin/python -S

import sys
sys.setdefaultencoding("utf-8")
import site

所有的字符串都是干净的,没有翻译。 Python 2.x 就是这样。 Python 3 可能会有所不同。

【讨论】:

  • 那行不通,import sys sys.setdefaultencoding("utf8") import site 给我这个:AttributeError: 'module' object has no attribute 'setdefaultencoding'
  • @hidura 你在用 Python 3 吗?
  • 是的,但我解决了,问题不在 Python 上,而是在 Javascript 上,但谢谢!!!
【解决方案4】:

你可以使用支持 unicode 的 psycopg2...

【讨论】:

  • 但它的 Python 3 支持处于测试阶段,才推出几周,也许项目在此之前就开始了?
  • 我更喜欢使用 py-postgresql 这是这个驱动程序的唯一问题。
猜你喜欢
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
  • 2021-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
相关资源
最近更新 更多