我有一个函数,它将Unicode \u05D4\u...
中的字符串编码为变量str
,我想将该Unicode更改为字母,以便此str
将包含已翻译的字符串
我该怎么做?
答案 0 :(得分:1)
我们可以在这里处理两种类型的字符串。
第一个是 Python Unicode字符串,其中字符串已经是一组unicode点。
这就是Python中的样子:
>>> x = u"\u1129\u1129"
>>> x
u'\u1129\u1129'
您实际上只需将其打印到屏幕上,因为Python打印功能通常使用支持此功能的编码。 (我相信它是sys.stdout.encoding)
>>> print x
ᄩᄩ
如果您希望对此进行编码,则应该使用utf-8编码,该编码支持所有已知的Unicode字符。但是,您仍然需要使用print函数将其打印为可读字符。
但是,这种字符串很容易打印!我怀疑你输出这个到屏幕会有什么问题。这就是为什么我相信你有第二种类型的字符串:
第二种类型的字符串是 Unicode转义字符串,它可以在Java .properties文件中找到(它们强制您使用ascii编码的一些单字节变体)。这就是它在Python中的样子:
>>> escapedString = "\\u05D4\\u05D4\\u05D4"
>>> print escapedString
\u05D4\u05D4\u05D4
然后因为设计这些文件的人不知道Unicode and the basic essentials of character encoding,我们的工作就是将这些转义的代码点转换为可读字符。
>>> pythonUnicode = escapedString.decode("unicode-escape")
# This turns escaped unicode code points into Python unicode code points
>>> print pythonUnicode
ההה
看起来我们有可读的字符!
但是,如果您的基本多语言平面之外的字符(U + 0到U + FFFF),请务必小心。有不同的方法来编码超过基本两个字节的字符。例如:
Python使用\U
(注意大写U)和八个字符来转义扩展字符。
>>> print "\\U0001D11E".decode("unicode-escape")
>>> print u"\U0001D11E"
但是rfc指定了另一种逃避:
转义不在Basic Multilingual中的扩展字符 平面,角色表示为十二个字符的序列, 编码UTF-16代理对。所以,例如,一个字符串 只包含G谱号字符(U + 1D11E)可以表示为 “\ uD834 \ uDD1E”。
因此,请确保您知道数据的来源!
答案 1 :(得分:0)
在分配时将字符串编码为unicode,并使用print
正确提示转义字符:
>>> s = u'\u05D4\u...'
>>> print s
ה
答案 2 :(得分:0)
使用u'..'声明一个unicode字符串并使用UTF-8对其进行编码(UTF-8是一种可以代表Unicode字符集中每个字符的可变宽度编码)。
#!/usr/bin/evn python
a = u'\05D4\05D4'
print a.encode(utf-8')
>> xx
答案 3 :(得分:-2)
如果您有Unicode字符串,并且想要将其转换为可显示的字符,则需要选择编码。我假设您要在终端和运行窗口上显示它?
ustr = u'\u05D5'
print ustr.encode('latin-1')
现在这里有点搞笑。您在示例中引用的序列不会映射到latin-1编码中的任何合法字符,因此我建议您始终将“replace”指定为错误处理程序。即:
print ustr.encode('latin-1', 'replace')
注:
我看到字符集是希伯来语
print ustr.encode('hebrew', 'replace') # alias for iso8859_8