我有一个unicode,例如“00C4”保存在一个数组中。我想替换占位符,例如文本中的“\ A25”,其中包含来自数组的unicode的ascii值,该数组仅具有unicode值。我尝试了编码,解码,原始字符串,unicode字符串和不同设置的所有内容和转义符号“\”。这里的问题是我不能在代码中写清楚的'\ u1234',我必须使用数组值并将它与'\ u'结合起来。这是我目前的代码:
e.g。 prototypeArray [i] [1] = 00C4
e.g。 prototypeArray [i] [0] = A25
unicodeChar = u'\\u' + prototypeArray[i][1]
placeholder = '\\' + prototypeArray[i][0]
placeholder = u'' + placeholder
text = text.replace(placeholder,s)
目前它只是取代例如\ A25用文本中的\ u00C4。 unicode字符不会被解释为。
答案 0 :(得分:2)
UTF-8具体解释: 我假设您在UTF-8中以十六进制表示的unicode点存储为变量(c)中的字符串。而你想确定相应的角色。然后,以下代码段显示了如何执行此操作:
>>> import binascii
>>> cp2chr = lambda c: binascii.unhexlify(c.zfill(len(c) + (len(c) & 1))).decode('utf-8')
>>> cp2chr('C484')
'Ą'
说明: zfill
如果字符数为奇数,则前缀为零。 binascii.unhexlify
基本上每个都有两个字符,将它们解释为十六进制数字并使它们成为一个字节。所有这些字节都合并为一个字节数组。最后str.decode('utf-8')
将这些字节解释为UTF-8编码数据并将其作为字符串返回。
>>> cp2chr('00C4')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc4 in position 1: unexpected end of data
但是,您提供的示例不是有效的UTF-8数据。请参阅Wikipedia's UTF-8 byte structure table以识别有效的字节序列。 C4
具有位结构11000100
,因此是一个连续字节,之后需要另一个字符。
编码独立解释:
因此,您可能正在寻找独立于编码的unicode点的解释。然后,您正在寻找raw_unicode_escape
编码:
>>> cp2chr = lambda c: (b'\\u' + c.encode('ascii')).decode('raw_unicode_escape')
>>> cp2chr('00C4')
'Ä'
说明: raw_unicode_escape
转换字节字符串中给出的unicode转义序列并将其作为字符串返回:b'\\u00C4'.decode('raw_unicode_escape')
给出Ä
。如果您在源代码中编写\uSOMETHING
,这就是python在内部执行的操作。