如何在Python中得到UTF16(十进制)?

2024-09-19 20:29:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个图释的Unicode码位表示为U+1F498

emoticon = u'\U0001f498'

我想得到这个字符的utf-16十进制组,根据this website55357和{}。在

我试着去做print emoticon.encode("utf16"),但一点帮助也没有,因为它给出了一些其他字符。在

同样,在将其编码为UTF-16之前尝试从UTF-8解码也没有帮助。在

如何正确获取unicode字符的utf-16十进制组?在


Tags: 编码unicodewebsitethis解码字符utfencode
2条回答

在Python 2“窄”构建中,它非常简单:

>>> emoticon = u'\U0001f498'
>>> map(ord,emoticon)
[55357, 56472]

这在Python 2(窄版和宽版)和Python 3中都适用:

^{pr2}$

输出:

(55357, 56472)

对于任意长度的字符串,UTF-16打印的是:

from __future__ import print_function,division
import struct

def utf16words(s):
    encoded = s.encode('utf-16le')
    num_words = len(encoded) // 2
    return struct.unpack('<{}H'.format(num_words),encoded)

emoticon = u'ABC\U0001f498'
print(utf16words(emoticon))

输出:

(65, 66, 67, 55357, 56472)

您可以^{}使用utf-16编码的字符,然后将每2个字节的编码数据转换为带有^{}(或python2中的^{})的整数。在

Python3

def utf16_decimals(char, chunk_size=2):
    # encode the character as big-endian utf-16
    encoded_char = char.encode('utf-16-be')

    # convert every `chunk_size` bytes to an integer
    decimals = []
    for i in range(0, len(encoded_char), chunk_size):
        chunk = encoded_char[i:i+chunk_size]
        decimals.append(int.from_bytes(chunk, 'big'))

    return decimals

Python 2+Python 3

^{pr2}$

结果:

>>> utf16_decimals(u'\U0001f498')
[55357, 56472]

相关问题 更多 >