我有一个二进制代码如下:
1101100110000110110110011000001011011000101001111101100010101000
我想将其转换为UTF-8编码。在Python中该怎么做?
我有一个二进制代码如下:
1101100110000110110110011000001011011000101001111101100010101000
我想将其转换为UTF-8编码。在Python中该怎么做?
简化版:
>>> test_string = '1101100110000110110110011000001011011000101001111101100010101000'
>>> print ('%x' % int(test_string, 2)).decode('hex').decode('utf-8')
نقاب
倒数(来自@Robᵩ的评论):
>>> '{:b}'.format(int(u'نقاب'.encode('utf-8').encode('hex'), 16))
1: '1101100110000110110110011000001011011000101001111101100010101000'
s=u'نقاب'; print '{:b}'.format(int(s.encode('utf-8').encode('hex'), 16))
- Robᵩ.encode('utf-8')
是不必要的)。 - Igonatos = "سلام"
和s = u"سلام"
会产生不同的结果。前者失败了,后者成功了。但是让我们停止解决新问题。@Aidin.T,如果您在编码方面有问题,请开一个新问题。 - Robᵩ我的想法是:
1. 将字符串分成八位一组
2. 使用 int
和后来的 chr
将八位数转换为十六进制
3. 将它们连接起来并将 utf-8 字符串解码为 Unicode
这段代码对我有用,但我不确定它打印出来的是什么,因为我的控制台没有 utf-8(Windows :P)。
s = '1101100110000110110110011000001011011000101001111101100010101000'
u = "".join([chr(int(x,2)) for x in [s[i:i+8]
for i in range(0,len(s), 8)
]
])
d = u.decode('utf-8')
unichr
有些怀疑。因为原帖中说他的二进制已经是UTF-8格式了。UTF-8有可变长度的字符,所以我只使用了chr
函数将原始字节串拼接成一个字符串,然后再将其解码为Unicode。 - Paulo Busplit('........')
。我认为基本上和我的想法一样。+1 - Paulo Bu>>> s='1101100110000110110110011000001011011000101001111101100010101000'
>>> print (''.join([chr(int(x,2)) for x in re.split('(........)', s) if x ])).decode('utf-8')
نقاب
>>>
或者,反之亦然:
>>> s=u'نقاب'
>>> ''.join(['{:b}'.format(ord(x)) for x in s.encode('utf-8')])
'1101100110000110110110011000001011011000101001111101100010101000'
>>>
def bin2text(s): return "".join([chr(int(s[i:i+8],2)) for i in xrange(0,len(s),8)])
>>> print bin2text("01110100011001010111001101110100")
>>> test
unichr()
而不是仅仅使用chr()
。http://docs.python.org/2/library/functions.html#unichr - Christian Ternus
hd
或od
或类似的十六进制转储实用程序,并复制粘贴前几行? - Robᵩ