Python中的Unicode解码

Python中的Unicode解码,python,string,unicode,Python,String,Unicode,我有一个函数,它获取一个用Unicode编码的字符串\u05D4\u..作为变量str,我想将该Unicode更改为字母,以便该str将包含翻译后的字符串 如何执行此操作?如果您有Unicode格式的字符串,并且希望将其转换为可显示字符,则需要选择编码。我假设你想在你的终端和你正在运行的窗口上显示它 ustr = u'\u05D5' print ustr.encode('latin-1') 现在有件有趣的事。您在示例中引用的序列没有映射到拉丁-1编码中的任何合法字符,因此我建议您始终指定“re

我有一个函数,它获取一个用Unicode编码的字符串
\u05D4\u..
作为变量
str
,我想将该Unicode更改为字母,以便该
str
将包含翻译后的字符串


如何执行此操作?

如果您有Unicode格式的字符串,并且希望将其转换为可显示字符,则需要选择编码。我假设你想在你的终端和你正在运行的窗口上显示它

ustr = u'\u05D5'
print ustr.encode('latin-1')
现在有件有趣的事。您在示例中引用的序列没有映射到拉丁-1编码中的任何合法字符,因此我建议您始终指定“replace”作为错误处理程序。即:

print ustr.encode('latin-1', 'replace')
注:

我看到字符集是希伯来语的

print ustr.encode('hebrew', 'replace') # alias for iso8859_8

在赋值时将字符串编码为unicode,并使用
print
正确提示转义字符:

>>> s = u'\u05D4\u...'
>>> print s
ה

实际上,我们可以在这里处理两种类型的字符串

第一个是一个Python Unicode字符串,其中该字符串已经是一组Unicode点

这是Python中的外观:

>>> x = u"\u1129\u1129"
>>> x
u'\u1129\u1129'
>>> escapedString = "\\u05D4\\u05D4\\u05D4"
>>> print escapedString
\u05D4\u05D4\u05D4
实际上,您可以将其打印到屏幕上,因为Python打印函数通常使用支持此功能的编码。(我相信是sys.stdout.encoding)

如果您希望对此进行编码,可能应该使用utf-8编码,它支持所有已知的Unicode字符。但是,您仍然需要print函数将其打印为可读字符

但是,这种字符串很容易打印!我怀疑你在把这个输出到屏幕上时会有什么困难。这就是为什么我相信你有第二种类型的字符串:


第二种类型的字符串是Unicode转义字符串,可以在Java.properties文件中找到(在这些文件中,它们强制您使用ascii编码的一些单字节变体)。这是Python中的外观:

>>> x = u"\u1129\u1129"
>>> x
u'\u1129\u1129'
>>> escapedString = "\\u05D4\\u05D4\\u05D4"
>>> print escapedString
\u05D4\u05D4\u05D4
因为设计这些文件的人都不知道,所以我们的工作就是把这些转义的代码点转换成可读的字符

>>> 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")
Use u'..' to declare an unicode string and use UTF-8 to encode it (UTF-8 is a variable-width encoding that can represent every character in the Unicode character set).

#!/usr/bin/evn python
a = u'\05D4\05D4'
print a.encode(utf-8')

>> xx
>>打印“\\U0001D11E”。解码(“unicode转义”)

使用u“..”声明unicode字符串,并使用UTF-8对其进行编码(UTF-8是一种可变宽度编码,可以表示unicode字符集中的每个字符)


不要给你的变量命名为str。它是python中的一种类型。你的命名是向后的;您的字符串是Unicode,并且已经包含字母。你想把它编码成字节。我强烈建议你阅读和/或观看(这适用于所有看到这个问题的人,如果他们以前没有看过这个网站的话…),我没有冒犯任何人。OP没有指定编码。我猜是WindowsLatin-1——用来演示如何编码。然后我测试了它,发现它没有清晰地编码为拉丁语-1,所以我展示了一个错误处理的示例。但现在我被贴上了麻木不仁的标签,因为我不知何故读懂了他的心思,或者把每一个编解码器都放在了内存中?注意,在第二种情况下,有许多不同的格式使用了
\u
转义-Python unicode文本(它
unicode转义
处理)、Java属性、JavaScript字符串文本、JSON等等。很重要的一点是要知道你在对付哪一个,因为他们都有稍微不同的规则,关于其他逃逸是有效的
unicode转义
根据数据的来源,可能是也可能不是解析数据的有效方法。@bobince谢谢,我不知道这一点。添加了更多的信息。添加了更多的链接。放弃了Unicode成为神奇统一标准的梦想。