Django中的UTF8字符串里的\u字符

1 投票
1 回答
1870 浏览
提问于 2025-04-16 00:56

我在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()这个函数。

撰写回答