Django中的UTF8字符串里的\u字符
我在Django中往数据库里添加UTF-8格式的数据。
当数据存入数据库时,一切看起来都很正常,比如字符“Hello”是UTF-8编码的。
我的MySQL数据库也是UTF-8编码的。当我通过查询数据库查看数据时,我的示例字符串显示为:?Hello?。我猜这可能是因为字符以UTF-8编码的方式显示。
但是,当我在终端中选择数据库里的数据,或者导出为网络服务时,我的字符串却显示为:\u201cHello World\u201d。
有没有人知道我该如何正确显示我的字符呢?
我需要在某个地方进行额外的UTF-8编码吗?
谢谢,
Nick。
1 个回答
6
u'\u201cHello World\u201d'
这是正确的Python表示方式,用来显示Unicode文本“Hello World”
。智能引号的字符用\uXXXX
这种十六进制的方式显示,而不是直接显示出来,因为在终端上写入Unicode字符时常常会遇到问题,尤其是在Windows系统上。(看起来MySQL试图把这些字符写入终端,但失败了,所以显示成了?
这种占位符。)
在一个能够正确输入和输出Unicode字符的终端上,你可以确认它们是一样的:
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) [GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> u'\u201cHello World\u201d'==u'“Hello World”'
True
就像字节字符串一样,\x
序列和字符是一样的:
>>> '\x61'=='a'
True
现在,如果你在导出的文件中看到了\u
或\x
序列,那说明你在导出时做错了什么。可能是你不小心用了repr()
这个函数。