如何通过 Python 中的 ASCII 字符串恢复 Unicode 字符串?
How to recover a Unicode string by its ASCII string in Python?
在提问之前我想举个例子。
u_string = u'\xcb\xa5\xb5'
u_string
Out[79]: 'Ë¥µ'
asc_string = ascii(u_string)
asc_string
Out[81]: "'\xcb\xa5\xb5'"
在这里,我终于得到了一个只包含ascii字符的ascii字符串(asc_string)。
我的问题是,
如果我只有 asc_string,如何将其转换为原始 u_string(Unicode 字符串)?
谢谢
马丁
你可以这样解码:
asc_string.encode().decode( 'unicode-escape' )
# "'Ë¥µ'"
我不知道为什么,但 ascii 添加了一组额外的引号,您可以像这样删除它们:
asc_string.encode().decode( 'unicode-escape' )[1:-1]
# 'Ë¥µ'
对于这种情况,最简单的完全正确的方法是 ast.literal_eval
:
>>> import ast
>>> origversion = u'\xcb\xa5\xb5' # Leading u is unnecessary on Python 3
>>> asciiform = ascii(origversion)
>>> origversion == ast.literal_eval(asciiform)
True
之所以有效,是因为在字符串上使用 ascii
会添加引号和转义符,使字符串包含可重现原始字符串的字符串文字(它只是 repr
,但坚持仅使用 ASCII repr
) 中的字符; ast.literal_eval
旨在解析规范的 repr
s(ASCII 编码或非编码)文字以生成结果对象,在本例中为字符串。
在提问之前我想举个例子。
u_string = u'\xcb\xa5\xb5'
u_string
Out[79]: 'Ë¥µ'
asc_string = ascii(u_string)
asc_string
Out[81]: "'\xcb\xa5\xb5'"
在这里,我终于得到了一个只包含ascii字符的ascii字符串(asc_string)。
我的问题是, 如果我只有 asc_string,如何将其转换为原始 u_string(Unicode 字符串)?
谢谢 马丁
你可以这样解码:
asc_string.encode().decode( 'unicode-escape' )
# "'Ë¥µ'"
我不知道为什么,但 ascii 添加了一组额外的引号,您可以像这样删除它们:
asc_string.encode().decode( 'unicode-escape' )[1:-1]
# 'Ë¥µ'
对于这种情况,最简单的完全正确的方法是 ast.literal_eval
:
>>> import ast
>>> origversion = u'\xcb\xa5\xb5' # Leading u is unnecessary on Python 3
>>> asciiform = ascii(origversion)
>>> origversion == ast.literal_eval(asciiform)
True
之所以有效,是因为在字符串上使用 ascii
会添加引号和转义符,使字符串包含可重现原始字符串的字符串文字(它只是 repr
,但坚持仅使用 ASCII repr
) 中的字符; ast.literal_eval
旨在解析规范的 repr
s(ASCII 编码或非编码)文字以生成结果对象,在本例中为字符串。