如何在 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
سلام
我想知道如何获取 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
سلام