Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将字符转换为16位unicode编码_Python_Unicode - Fatal编程技术网

Python 将字符转换为16位unicode编码

Python 将字符转换为16位unicode编码,python,unicode,Python,Unicode,我有一个UTF-8字符,我想把它转换成16位的unicode编码。怎么做 通过读取写入文件并使用repr like,可以获得字符的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'的1

我有一个UTF-8字符,我想把它转换成16位的unicode编码。怎么做

通过读取写入文件并使用repr like,可以获得字符的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编码


最后一行是您想要的字符串。

要获得unicode码点,只需调用:

没有统一的unicode编码。如果您正在寻找长度超过16位的代码点的UTF-16表示形式,只需调用

u'\ufeff\u067e\u0679'.encode('utf-16')
因此,如果字符串在s中:

我想这就是你想要的?在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

Unicode编码不是一个正确的术语。您是在谈论UCS-2、UTF-16还是Unicode代码点?值得注意的是,0xfeff位在这里只是作为字节顺序标记,它本身不是文本的一部分。从这里看,它不像UTF-8。\u通常表示unicode代码点。从那里你可以用不同的格式对它进行编码,但不清楚你想做什么。请尝试更详细地解释您的问题。我希望我的unicode使用16位二进制表示法,就像unicode“U+0623”一样,我们有二进制表示法“11011000 10100011”为什么需要二进制表示法?@user1593134添加了二进制表示法。因为Unicode的跨度超过100000>2⁶ 字符,表示不一定是16位长。假设OP需要utf-16,则无法获得底层utf-16数据的实际表示,这一点仍有待澄清,正如您所说,ord提供的是代码点,而不是编码下的实际字节。事实上,对于7位ASCII范围之外的任何内容,数据看起来都不像任何标准的Unicode表示形式,至少我不认为它会。我如何将此Unicode转换为16位二进制形式。也许我在py3k evolution中遗漏了一些东西,但“a”.rjust2,0是否等同于“a”.zfill2?是的,我认为是,我没有意识到zfill可以处理任意字符串,虽然我认为它可能不喜欢十六进制字符,但文档说返回数字字符串,留下的字符串中填充了零。。。所以我认为十六进制字符可能会让事情变得不好——显然不是。是的,如果需要,您可以在我的示例中使用zfill2或zfill8。我认为zfill的关键在于它能正确处理负号——我认为这不是我代码中的问题。
u'\ufeff\u067e\u0679'.encode('utf-16')
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])
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])