为什么打印出奇怪的字符?Unicode问题?

2024-06-16 14:08:41 发布

您现在位置:Python中文网/ 问答频道 /正文

用户输入了单词

éclair

进入搜索框。在

^{pr2}$

为什么会有奇怪的问号? 我用Django来显示它:

Showing results 1 - 10 of about 140 for {{query|safe}}

Tags: ofdjango用户forquery单词resultssafe
3条回答

这是将未在UTF-8中编码的数据解释为UTF-8编码的结果。在

解释器期望从单词éclair的第一个字符的代码点开始,一个长度为三个字符的多字节编码字符,使用后面的两个字符,但无法对其进行解码(可能字节序列无效)。对于这种情况,将显示替换字符(U+FFFD)。在

所以在你的例子中,你只需要用UTF-8编码你的数据。在

这是一个编码问题。很可能您的表单或输出页面不是UTF-8编码的。在

这篇文章在这个问题上读得很好:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

你需要检查

  • 用户输入单词的HTML页面
  • 用于输出单词的HTML页面
  • 用于处理字符串的函数的多字节能力(尽管在Python中这可能不是问题)

如果搜索将应用于数据库,则需要检查数据库连接的编码以及表和列的编码。在

您使用错误的字符编码(字符集)为页面提供服务。检查您是否在整个应用程序中使用相同的编码(例如UTF-8)。这包括:

  • 来自web服务器的HTTP头(内容类型:text/html;charset=utf-8)
  • 与数据库通信(即设置名称“utf-8”)

相关问题 更多 >