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