如何在 Django 中获取阿拉伯字符串的 Unicode 表示?

How to get the Unicode representation of Arabic strings in Django?

我想知道如何获取 Python 中的 سلام 等阿拉伯字符串的 Unicode 表示形式?

结果应该是\u0633\u0644\u0627\u0645

我需要它以便我可以比较从 mysql 数据库检索的文本和存储在 redis 缓存中的数据。

在 python 2.x 中为您的字符串添加 u 前缀,这会使您的字符串成为 unicode 字符串。然后就可以调用unicode字符串的encode方法了

arabic_string = u'سلام'
arabic_string.encode('utf-8')

输出:

print arabic_string.encode('utf-8')
'\xd8\xb3\xd9\x84\xd8\xa7\xd9\x85'

对于python 2.7

string = 'سلام'
new_string = unicode(string)

假设你有一个实际的 Unicode 字符串,你可以这样做

# -*- coding: utf-8 -*-
s = u'سلام'
print s.encode('unicode-escape')    

输出

\u0633\u0644\u0627\u0645

# -*- coding: utf-8 -*-指令纯粹是告诉解释器源代码是UTF-8编码的,它与脚本本身如何处理Unicode无关。


如果您的脚本从 UTF-8 编码源中读取该阿拉伯语字符串,字节将如下所示:

\xd8\xb3\xd9\x84\xd8\xa7\xd9\x85

您可以像这样将其转换为 Unicode:

data = '\xd8\xb3\xd9\x84\xd8\xa7\xd9\x85'
s = data.decode('utf8')
print s
print s.encode('unicode-escape')  

输出

سلام
\u0633\u0644\u0627\u0645

当然,您确实需要确保您的终端设置为正确处理 Unicode。

请注意

'\u0633\u0644\u0627\u0645'

是包含 24 个字节的纯(字节)字符串,而

u'\u0633\u0644\u0627\u0645'

是一个包含 4 个 Unicode 字符的 Unicode 字符串。

这篇文章可能对您有所帮助:Pragmatic Unicode,作者是 SO 资深人士 Ned Batchelder。

由于您正在使用 Python 2.x,您将无法使用 encode。您需要使用 unicode 函数将字符串转换为 unicode 对象。

> f='سلام'
> f
'\xd8\xb3\xd9\x84\xd8\xa7\xd9\x85'
> unicode(f, 'utf-8') # note: you need to pass the encoding parameter in or you'll 
                      # keep having the same problem.
u'\u0633\u0644\u0627\u0645'
> print unicode(f, 'utf-8')
سلام

我不确定您使用哪个库来获取内容,但您最初可能能够以 unicode 格式获取数据。

> f = u'سلام'
> f
u'\u0633\u0644\u0627\u0645'
> print f.encode('unicode-escape')
\u0633\u0644\u0627\u0645
> print f
سلام