关于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 thatunicode(p)
will return a Unicode string, andstr(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/