为什么打印有趣的人物? unicode问题?

时间:2010-01-04 11:26:36

标签: python django unicode encoding

用户输入了

字样
éclair

进入搜索框。

Showing results 1 - 10 of about 140 for �air. 

为什么会出现奇怪的问号? 我正在使用Django来显示它:

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

5 个答案:

答案 0 :(得分:8)

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

本文非常关于此问题的良好解读:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

您需要检查

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

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

答案 1 :(得分:1)

当您将未以UTF-8编码的数据解释为UTF-8编码时,这是结果。

解释器期望从单词éclair的第一个字符的代码点开始,一个长度为3个字符的多字节编码字符,消耗接下来的两个字符但不能解码它(可能是无效的字节序列) 。在这种情况下,会显示 REPLACEMENT CHARACTER (U + FFFD)。

因此,在您的情况下,您只需要使用UTF-8对数据进行真正的编码。

答案 2 :(得分:0)

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

  • 来自网络服务器的HTTP标头(内容类型:text / html; charset = utf-8)
  • 与数据库的通信(即SET NAMES'utf-8')

答案 3 :(得分:0)

检查浏览器编码设置也很好。

答案 4 :(得分:0)

我在上面的回复中说。其他一些事情来自我的头脑:

如果你正在使用例如MySQL数据库,然后使用:

创建数据库可能会很好

创建数据库x字符集UTF8

您还可以查看:http://docs.djangoproject.com/en/dev/ref/settings/#default-charset