Python 3.x 重新解释Unicode字符串
我从一个客户端接收unicode数据,存储在一个名为“data”的字典中。下面的代码Python 3.x 重新解释Unicode字符串,python-3.x,unicode,utf-8,Python 3.x,Unicode,Utf 8,我从一个客户端接收unicode数据,存储在一个名为“data”的字典中。下面的代码 variable1 = '\u03b5\u0061\u0073\u0064\u0066' print("TYPE1 = " + str(type(variable1))) print("VAR1 = " + variable1) variable2 = data['text'] print("TYPE2 = " + str(type(variable2))) print("VAR2 = " + variabl
variable1 = '\u03b5\u0061\u0073\u0064\u0066'
print("TYPE1 = " + str(type(variable1)))
print("VAR1 = " + variable1)
variable2 = data['text']
print("TYPE2 = " + str(type(variable2)))
print("VAR2 = " + variable2)
印刷品
TYPE1 = <class 'str'>
VAR1 = εasdf
TYPE2 = <class 'str'>
VAR2 = \u03b5\u0061\u0073\u0064\u0066
这取决于输入数据被破坏(或以某种特定方式编码)的一致性,但对于给定的示例,以下内容应起作用:
>>> data = '\\u03b5\\u0061\\u0073\\u0064\\u0066'
>>> print(data)
\u03b5\u0061\u0073\u0064\u0066
>>> text = data.encode('ascii').decode('unicode_escape')
>>> print(text)
εasdf
“unicode_转义”编解码器正是为Python风格的unicode转义而提供的。它还适用于格式为\xNN
和\u000nnnn
的转义,并混合了文字ASCII字符
需要注意的几点:
步骤是必要的,因为.encode('ascii')
只存在于.decode
字节中,而不存在
str
- 如果您混合使用非ASCII文本和Unicode转义(在Python
literals中是允许的),您可以尝试str
,但我还没有考虑清楚这一点encode('utf-8')
在这里不起作用,因为数据周围没有引号eval
- 您的数据可能来自JSON,在JSON中也存在转义符
(但不是\unnn
和\xNN
转义符)。如果是这种情况,您必须单独处理U+FFFF以上的字符(例如emojis),这些字符由代理项对表示\u000nnn
- 转义unicode(下面的JavaScript示例)
在发送数据和使用
input.encode(“utf-8”).decode(“unicode-escape”)
似乎有效。用您的建议和结果更新了我的问题。数据确实来源于JSON。您是否尝试过
.encode('utf-8')
而不是ASCII?也许你也可以更新你的例子来重现UnicodeEncodeError(UnicodeEncodeError)。我不知道在没有客户端发送的情况下如何重现它(这会使它简单得多)。在pythonshell中,打印这些文本可以获得正确的输出。我猜str=“ε”
是最接近的东西:如果你能把它变成一个ε,那么我猜它会起作用。看起来“ε”
确实是实际收到的。那么u'\u03b5\u0061\u0073\u0064\u0066'
呢?
>>> data = '\\u03b5\\u0061\\u0073\\u0064\\u0066'
>>> print(data)
\u03b5\u0061\u0073\u0064\u0066
>>> text = data.encode('ascii').decode('unicode_escape')
>>> print(text)
εasdf
function escapeUnicode(str) {
return str.replace(/[^\0-~]/g, function(ch) {
return "\\u" + ("000" + ch.charCodeAt().toString(16)).slice(-4);
});
}