使用带有SQLAlchemy和Pyramid的unicode

时间:2013-01-08 05:56:07

标签: python unicode sqlalchemy pyramid

我有textboxbuttonsearch功能。在搜索功能中,我从textbox收到请求并使用:

queryE = queryE.filter(queryE.Campaign.CampaignName.like("%"+CampaignsKeyWord+"%"))

如果关键字只是 latin 编码,结果就可以,但是当我输入 unicode 时(例如,中文或日文),它不起作用。

例如おはようございます是db ok中的字符串吗?当我输入います进行搜索时,它会比较并给我おはようございます结果,对吧?但事实并非如此。当我打印おはようございます时,我可以在屏幕上看到ã?Šã?¯ã‚ˆã?†ã?”ã?–ã?„ã?¾ã?™

2 个答案:

答案 0 :(得分:1)

这是被视为Windows-1252的おはようございます的UTF-8字节。典型的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,这是因为{-1}}未定义为Windows-1252。


这只是将使用的编码声明到接收端的问题,您可以使用金字塔:

0x81

请注意,这是一个网页,如果你的意思是Windows终端只是忘了它。

答案 1 :(得分:1)

如果您的金字塔模板或该页面的响应没有正确的字符编码集,则可能导致文本变为乱码。我可能是错的,但从提供的信息来看,它听起来更像是与Pyramid或SQLAlchemy有关的HTML文档。如果Python在解码日文等文本时遇到问题,可能会引发UnicodeDecodeError,而不是尝试输出乱码文本。

如果您在金字塔中使用模板,例如Chameleon,则可能在其元标记中设置了错误的编码。如果是这样,请尝试在模板中切换到'utf-8',类似于:

<meta charset="utf-8">