将符号转换为其4位unicode转义表示形式,反之亦然。

5

1) 如何在Python 2.7中将符号转换为其4位Unicode转义表示法,例如将"¥"转换为"\u00a5"

2) 如何在Windows 7/8平台上将Unicode表示法转换为符号表示法,例如将"\u00a5"转换为"¥"

2个回答

8

1)需要进行\u转义吗?\x能否使用?如果可以,尝试使用unicode_escape编解码器。否则,您可以使用下面的函数进行转换:

def four_digit_escape(string):
    return u''.join(char if 32 <= ord(char) <= 126 else u'\\u%04x'%ord(char) for char in string)

symbol = u"hello ¥"
print symbol.encode('unicode_escape')
print four_digit_escape(symbol)

2) 同样地,你可以使用 unicode_escape 编码器:

encoded_symbol = '\\u00a5'
print encoded_symbol
print encoded_symbol.decode('unicode_escape')

1
我的回答假设您正在遵循所谓的“Unicode 三明治”的最佳实践。也就是说,在创建或读取 symbol 时,您将其转换为 Unicode 字符串。请参阅 http://nedbatchelder.com/text/unipain.html。 - Robᵩ

1
我发现在Python中最可靠的方法是先将文本解码为Unicode,获取Unicode字符的ord值,并将其插入格式字符串中。代码如下:

"\\u%04x" % ord("¥".decode("utf-8"))

还有一个方法unichr,据说可以输出类似于这样的内容,但在我的系统上,它显示的编码与所需的编码不同。因此,上述解决方案是我能想到的最具平台独立性的方式。


出现以下错误:UnicodeDecodeError: 'utf8'编解码器无法解码位置0处的字节0x9d:起始字节无效。 - rdp
1
这意味着utf-8不是您拥有字符串数据的格式。您可以尝试使用.decode(sys.stdout.encoding)来选择本地格式。否则,您只需要尝试从不同的格式进行解码以找到有效的方法。 - Andrew Johnson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接