如何在python中将任何语言的字符转换为各自的unicode?

时间:2017-02-17 17:03:32

标签: python unicode

我正在使用character.encode("unicode_escape"))函数将Devnagri和其他印度语脚本字符转换为它们的unicode版本,但是当涉及到英语阿尔卑斯语,数字数字和特殊字符时,此功能失败。 任何人都可以为此建议任何其他功能吗?

1 个答案:

答案 0 :(得分:0)

unicode_escape编解码器仅将非ascii字符转换为Unicode Escape格式。但你可以自己格式化它们:

#!python3.6
# coding:utf8
import re

def escape(s):
    def replace(m):
        item = ord(m.group(0))
        if item < 0x100:
            return fr'\x{item:02x}'
        elif item < 0x10000:
            return fr'\u{item:04x}'
        return fr'\U{item:08X}'
    return re.sub(r'.',replace,s)

s = 'abcü马克'
print(escape(s))

输出:

\x61\x62\x63\xfc\u9a6c\u514b\U0001F600

这是一个Python 2.7(窄版本) - 等价......以及为什么使用Unicode的人应该切换到Python 3:

#!python2.7
#coding:utf8
import re

def escape(s):
    def replace(m):
        char = m.group(0)
        if len(char) > 1:
            # Python 2 uses UTF-16 surrogate pairs for Unicode above U+FFFF.
            # Manually convert a UTF-16 surrogate pair to a Unicode ordinal.
            item = (((ord(char[0]) & 0x3FF) << 10) | (ord(char[1]) & 0x3FF)) + 0x10000
        else:
            item = ord(char)
        if item < 0x100:
            return r'\x{:02x}'.format(item)
        elif item < 0x10000:
            return r'\u{:04x}'.format(item)
        return r'\U{:08X}'.format(item)
    # This regular expression detects UTF-16 surrogate pairs.
    return re.sub(ur'[\ud800-\udbff][\udc00-\udfff]|.',replace,s)

s = u'abcü马克'
print(escape(s))

输出(相同):

\x61\x62\x63\xfc\u9a6c\u514b\U0001F600