python - 返回 Unicode 字符串与返回编码为 UTF-8 的普通字符串?

标签 python django unicode django-models utf-8

关于tutorial page对于 Django Web 框架,作者解释了为什么添加 __unicode__() 方法比 __str__() 更好,原因如下:

Django models have a default __str__() method that calls __unicode__() and converts the result to a UTF-8 bytestring. This means that unicode(p) will return a Unicode string, and str(p) will return a normal string, with characters encoded as UTF-8.

我不明白 Unicode 字符串和字符编码为 UTF-8 的字符串有什么区别。我以为 UTF-8 是 Unicode 的编码之一?

最佳答案

Python Unicode 对象是抽象的 - 它们表示独立于任何特定编码的 Unicode 代码点序列。另一方面,UTF-8 编码的字符串是对 Unicode 代码点序列进行编码的字节序列。它们是不同的抽象级别。

您可以将代码点视为抽象数字,并将编码视为该数字的特定二进制表示形式。 Unicode 对象代表“数字”(实际上是代码点),而字符串代表二进制。这个类比并不准确,但如果您已经习惯了这样的想法,例如,表示整数“8”的对象与表示特定位序列“00001000”的对象不同,这可能会澄清这一点。特别是如果您使用过二进制补码等系统,其中表示抽象整数“8”的位序列将会不同。

This essay尽管已有近十年的历史,但它仍然是我遇到过的对概念最清晰、最全面的解释之一。

This answer对特定于 Python 的细节非常了解。

关于python - 返回 Unicode 字符串与返回编码为 UTF-8 的普通字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17985021/

相关文章:

python - 通过elasticsearch_dsl使用 “must_not exists”

python - 最大科学记数法?

python - Python 脚本的 Bash 别名——这可能吗?

Python - 同时声明两个具有相同值的变量

Python:如何检查unicode字符串是否包含大小写字符?

c++ - 将 unicode 转换为 char

django - 'RelatedManager' 对象没有属性 'pk'

python - 在 Django 模板中转换星级评分

django - 在模板中显示上传的图像 - Django

java - unicode支持java和mysql