如何通过Unicode表示替换字符串中的所有字符?
最小例子:
>>> s = 'ä'
>>> new = some_function(s, 'unicode')
>>> new
'\u00E4'
答案 0 :(得分:2)
不确定“unicode表示”是什么意思。 这是我对你的问题的解释的解决方案。
对于Python 3:
print('\\u' + hex(ord('ä'))[2:].upper().rjust(4, '0'))
对于Python 2:
print('\\u' + repr(u'ä')[4:-1].upper().rjust(4, '0'))
答案 1 :(得分:1)
我认为你想要的是什么?
>>> new = s.decode('utf-8')
答案 2 :(得分:1)
第一步是从字节字符串转换为Unicode字符串:
u = s.decode('utf-8')
第二步是创建一个新字符串,其中每个字符都被其Unicode转义序列替换。
new = ''.join('\\u{:04x}'.format(ord(c)) for c in u)
如果你的意图只是替换非ASCII字符,那么稍作修改即可:
new = ''.join(c if 32 <= ord(c) < 128 else '\\u{:04x}'.format(ord(c)) for c in u)
请注意,\u0000
表示法仅适用于基本Unicode平面中的Unicode代码点。你需要\U00000000
符号来表示更大的东西。您还可以使用\x00
表示法来处理小于256的任何内容。以下内容处理所有情况,可能更容易阅读:
def unicode_notation(c):
x = ord(c)
if 32 <= x < 128:
return c
if x < 256:
return '\\x{:02x}'.format(x)
if x < 0x10000:
return '\\u{:04x}'.format(x)
return '\\U{:08x}'.format(x)
new = ''.join(unicode_notation(c) for c in u)