下一个关于俄罗斯编码、mssql 和 python 的问题

Posted

技术标签:

【中文标题】下一个关于俄罗斯编码、mssql 和 python 的问题【英文标题】:Next question about russian encoding, mssql and python 【发布时间】:2010-07-08 16:01:14 【问题描述】:

我有这个简单的代码:

import pymssql
import codecs
conn=pymssql.connect(host='localhost:1433', user='sa',  password='password', database='TvPgms')
cur = conn.cursor()
cur.execute('SELECT TOP 5 CAST( Name AS nvarchar(400) ), CONVERT(nvarchar(400), idProgram) FROM dbo.Programs')
p=cur.fetchone()
h=p[0]
d=codecs.lookup(h)
print h
conn.close()

我收到错误:查找错误:未知编码:????? ??? ???????

我无法从 MSSQL 中提取俄语 varchar 字段。但是当我只是在相同的代码中打印字符串时一切正常,它会打印我正常的俄语字符。 谁知道怎么做?

如果我只是打印 h insted of codecs.lookup 而不是我得到任何错误,但它会打印我 ???????? ?????????

【问题讨论】:

请不要打开那么多类似的问题。在尝试获取数据库条目之前,您必须从头开始并让print u"абвгдежзийкл" 工作,这在 Windows 上似乎已经够难了。 这确实是另一个问题。当我打印你“абвгдежзийкл”时,它给了我абвгдежзийкл,但是当我从数据库中打印我的数据时,它给了我???????????????????????? 在另一个线程中你说它不起作用。 我写道我解决了这个问题。现在是另一个问题! 【参考方案1】:

codecs.lookup 采用编码名称,而不是一些随机字符串,而且您可能在这里也不需要它。我认为目前由于严重的技术问题,您无法可靠地将 Unicode 字符串从 Python 打印到 Windows 控制台。尝试写入文件或直接使用WriteConsoleW 函数(通过ctypes)。

【讨论】:

它没有帮助,我尝试写入文件。在文件中我得到相同的问号。 也许你知道什么类型的编码发送给我mssql服务器响应? 不,如果在尝试使用文字字符串时已经出现错误,那也没关系。 数据库服务器会将给定的排序规则定义的编码发送给表。不确定是否使用 pymssql,但是当使用 mysqldb 连接到 MySql 时,您可以使用数据库定义编码,将 '?charset=utf8&use_unicode=1' 添加到连接字符串中。我想这对于 mssql 和 pymssql 也可能是可能的,但我不知道如何。

以上是关于下一个关于俄罗斯编码、mssql 和 python 的问题的主要内容,如果未能解决你的问题,请参考以下文章

python3连接MSSQL数据库 中文乱码怎么解决

使用 PHP 和 MSSQL 准备好的语句

MSSQL php 从一种编码中选择并插入到另一种

python3基础语法

Python3 基础语法

转载关于Python脚本开头两行的:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 指定文件编码类型