Python:用Unicode表示替换字符

时间:2014-05-05 20:50:23

标签: python string replace utf-8

如何通过Unicode表示替换字符串中的所有字符?

最小例子:

>>> s = 'ä'
>>> new = some_function(s, 'unicode')
>>> new
'\u00E4'

3 个答案:

答案 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)