我有一个函数,它以Unicode \u05D4\u...
作为变量str
获取编码的字符串,并且我想将该Unicode更改为字母,以便此str
将包含翻译的字符串。在Python中解码Unicode
我该怎么办?
我有一个函数,它以Unicode \u05D4\u...
作为变量str
获取编码的字符串,并且我想将该Unicode更改为字母,以便此str
将包含翻译的字符串。在Python中解码Unicode
我该怎么办?
实际上有两个我们可以在这里处理的字符串类型。
第一个是Python Unicode字符串,其中字符串已经是一组unicode点。
这就是它看起来像在Python:
>>> x = u"\u1129\u1129"
>>> x
u'\u1129\u1129'
实际上,你可以只打印此屏幕,因为Python的打印功能通常使用支持该编码。 (我相信这是sys.stdout.encoding)
>>> print x
ᄩᄩ
如果你想编码这个,你应该使用UTF-8编码,它支持所有已知的Unicode字符。但是,您仍需要打印功能才能将其打印为可读的字符。
但是,这种字符串很容易打印!我怀疑你会有任何麻烦输出到屏幕上。这就是为什么我相信你有第二个字符串类型:
第二种类型的字符串是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指定了不同的一种逃避:
为了躲避扩展的字符不在基本多 平面中,字符表示为一个12个字符的序列, 编码UTF-16代理对。因此,例如,仅包含G谱号字符(U + 1D11E)的字符串 可以表示为 “\ uD834 \ uDD1E”。
因此,请确保您知道您的数据来自哪里!
如果您有Unicode字符串,并且您想将其翻译为可显示字符,则需要选择您的编码。我假设你想在终端上显示它,并且你正在运行的窗口?
ustr = u'\u05D5'
print ustr.encode('latin-1')
现在,这里有趣。您在示例中引用的序列不映射到拉丁语-1编码中的任何合法字符,因此我建议您始终指定'替换'作为错误处理程序。即:
print ustr.encode('latin-1', 'replace')
注:
我看到的字符集旨在为希伯来语
print ustr.encode('hebrew', 'replace') # alias for iso8859_8
我不愿意'不要冒犯任何人。 OP没有指定编码。我猜测在Windows拉丁-1 - 演示如何编码。然后我对它进行了测试,并且看到它没有完全编码为latin-1,所以我展示了一个错误处理的例子。但是现在我被标记为不敏感,因为我以某种方式读取了他的想法或将每个编解码器都记录在内存中? – user590028
编码字符串作为分配Unicode和使用print
正确提示转义字符:
>>> s = u'\u05D4\u...'
>>> print s
ה
使用u'..'声明一个unicode字符串并使用UTF-8对其进行编码(UTF-8是一种可变宽度编码,可表示Unicode字符集中的每个字符)。
#!/usr/bin/evn python
a = u'\05D4\05D4'
print a.encode(utf-8')
>> xx
不要命名变量str。它是python中的一个类型 –
你的命名是倒退的;你的字符串是Unicode的,它已经有了字母。你想*编码成字节。 – RemcoGerlich
我强烈建议你阅读和/或观看http://nedbatchelder.com/text/unipain.html(如果他们以前没有看到这个网站,这个方法可以让所有人看到这个问题) – geoffspear