我有一个UTF-8字符,我想将其转换为16位的unicode编码。怎么做?
可以通过读取写入文件的文件并使用repr()来获取字符的Unicode:
import codecs
f = codecs.open("a.txt",mode='rb',encoding='utf-8')
r = f.readlines()
for i in r:
print i,repr(i)
输出:
پٹ u'\ufeff\u067e\u0679'
现在我如何获得u'\ufeff\u067e\u0679'
的16位unicode编码?
答案 0 :(得分:3)
要获取unicode 代码点,只需致电ord
:
import io
f = io.open("a.txt", mode='r', encoding='utf-8')
for line in f:
print (line, repr(line), ' '.join(str(ord(c)) for c in line),
' '.join('{0:b}'.format(ord(c)) for c in line))
没有一个unicode 编码。如果您正在寻找代码点的UTF-16表示(可以超过16位),只需调用
u'\ufeff\u067e\u0679'.encode('utf-16')
答案 1 :(得分:0)
>>> a=u'\ufeff\u067e\u0679'
>>> a
u'\ufeff\u067e\u0679'
>>> a.encode("utf-16")
'\xff\xfe\xff\xfe~\x06y\x06'
最后一行是你想要的字符串。
答案 2 :(得分:0)
因此,如果您的字符串位于s
:
s_enc = s.encode("utf-16")
hex_string = "".join([format(i, "X").rjust(2,"0") for i in s_enc])
bin_string = "".join([format(i, "b").rjust(8,"0") for i in s_enc])
我认为这就是你追求的目标? (在py3k中测试过,但我认为应该在2中工作)。
编辑:需要稍微修改Python 2x:
s_enc = s.encode("utf-16")
hex_string = "".join([format(ord(i), "X").rjust(2,"0") for i in s_enc])
bin_string = "".join([format(ord(i), "b").rjust(8,"0") for i in s_enc])
但是,无论哪种方式关键是首先调用encode()将其转换为您选择的编码(从您的问题中不清楚,但在行之间读取,是UTF-16)