utf-8转换为utf-16

时间:2013-11-26 09:04:51

标签: python python-3.x unicode utf-16

我想将中文字符转换为unicode格式,例如'\ uXXXX' 但是当我使用str.encode('utf-16be')时,它会显示:

b'\xOO\xOO'

所以,我写了一些代码来执行我的请求,如下所示:

data="index=索引?"
print(data.encode('UTF-16LE'))

def convert(s):
    returnCode=[]
    temp=''
    for n in s.encode('utf-16be'):
        if temp=='':
            if str.replace(hex(n),'0x','')=='0':
                temp='00'
                continue
            temp+=str.replace(hex(n),'0x','')
        else:
            returnCode.append(temp+str.replace(hex(n),'0x',''))
            temp=''

    return returnCode

print(convert(data))

有人可以给我建议在python 3.x中进行这种转换吗?

2 个答案:

答案 0 :(得分:2)

我不确定我是否理解你。

Unicode就像一个类型。在python 3中,所有字符串都是unicode,因此当您编写data = "index=索引?"时,数据已经是unicode。如果您想获得仅用于显示的替代表示,您可以使用:

def display_unicode(data):
    return "".join(["\\u%s" % hex(ord(l))[2:].zfill(4) for l in data])

>>> data = "index=索引?"
>>> print(display_unicode(data))
\u0069\u006e\u0064\u0065\u0078\u003d\u7d22\u5f15\u003f

请注意,该字符串现在具有真正的反斜杠和数字表示,而不是unicode字符。

但可能还有其他选择

>>> data.encode('ascii', 'backslashreplace')
b'index=\\u7d22\\u5f15?'
>>> data.encode('unicode_escape')
b'index=\\u7d22\\u5f15?'

答案 1 :(得分:0)

首先尝试解码,例如:s.decode('utf-8').encode('utf-16be')