Python 将unicode与SQLAlchemy和Pyramid结合使用

Python 将unicode与SQLAlchemy和Pyramid结合使用,python,unicode,sqlalchemy,pyramid,Python,Unicode,Sqlalchemy,Pyramid,我有一个文本框、一个按钮和一个搜索功能。在搜索功能中,我从textbox获取请求,并使用: queryE = queryE.filter(queryE.Campaign.CampaignName.like("%"+CampaignsKeyWord+"%")) 如果关键字只是拉丁编码,结果是可以的,但是当我输入unicode(例如,中文或日语)时,它就不起作用了 例如おはようございます我的字符串在db中是否正常?当我键入います搜索它将比较并给我おはようございます结果,对吗?但事实并非如此。当我打

我有一个
文本框
、一个
按钮
和一个
搜索
功能。在搜索功能中,我从
textbox
获取请求,并使用:

queryE = queryE.filter(queryE.Campaign.CampaignName.like("%"+CampaignsKeyWord+"%"))
如果关键字只是拉丁编码,结果是可以的,但是当我输入unicode(例如,中文或日语)时,它就不起作用了


例如
おはようございます我的字符串在db中是否正常?当我键入
います搜索它将比较并给我
おはようございます结果,对吗?但事实并非如此。当我打印
おはようございます,我可以看到?™
的UTF-8字节おはようございます被视为Windows-1252。典型的windows终端或未设置内容类型字符集的网页。但您不必担心,您的程序正在输出有效的UTF-8,只需比较它们:

您看到的已转换为Windows-1252的内容:

e3 3f 8a e3 3f af e3 82 88 e3 3f 86 e3 3f 94 e3 3f 96 e3 3f 84 e3 3f be e3 3f 99
UTF-8中的预期结果:

e3 81 8a e3 81 af e3 82 88 e3 81 86 e3 81 94 e3 81 96 e3 81 84 e3 81 be e3 81 99
这里唯一的区别是
0x3f
“?”
)而不是
0x81
,这是因为Windows-1252没有定义
0x81


这只是一个向接收端声明所用编码的问题,通过金字塔,您可以做到:

response.charset = 'utf8'

请注意,如果您的意思是windows终端,则这是一个网页。

如果您对该网页的金字塔模板或响应没有正确的字符编码设置,则可能会导致文本变得混乱。我可能错了,但从提供的信息来看,它似乎更多地与HTML文档有关,而不是金字塔或SQLAlchemy。如果Python在解码诸如日语之类的文本时遇到问题,它可能会引发UnicodeDecodeError,而不是试图输出乱码文本

如果您在金字塔中使用模板,例如变色龙,那么它的元标记中可能设置了错误的编码。如果是,请尝试切换到模板中的“utf-8”,类似于:



您必须更加具体。什么不起作用?你看到了什么,你期望看到什么?对于每一个案例,你到底给出了什么样的输入?例如おはようございます 数据库中的字符串可以吗?您需要在问题中添加请求输入、数据库内容、从数据库中获得的内容以及期望的内容。如果没有这些信息,我们无法帮助您。谢谢您的回答,我会试试看