我有textbox
,button
和search
功能。在搜索功能中,我从textbox
收到请求并使用:
queryE = queryE.filter(queryE.Campaign.CampaignName.like("%"+CampaignsKeyWord+"%"))
如果关键字只是 latin 编码,结果就可以,但是当我输入 unicode 时(例如,中文或日文),它不起作用。
例如おはようございます
是db ok中的字符串吗?当我输入います
进行搜索时,它会比较并给我おはようございます
结果,对吧?但事实并非如此。当我打印おはようございます
时,我可以在屏幕上看到ã?Šã?¯ã‚ˆã?†ã?”ã?–ã?„ã?¾ã?™
答案 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">