无法在Python中解码西里尔字符串

3 投票
1 回答
15361 浏览
提问于 2025-04-18 06:43

我有一个编码过的文件,里面有一些像这样的字符串:

b'1'    b'\xca\xee\xef\xe5\xe9\xf1\xea' b'1'    b'ADMIN'    b'2013-07-08 00:21:55'  
b'2'    b'\xd7\xe5\xeb\xff\xe1\xe8\xed\xf1\xea' b'1'    b'ADMIN'    b'2013-07-08 00:22:05'  

我应该怎么解码它呢?我试过用codecs,尝试解码/编码成cp1251,但都没成功。

file -bi命令显示字符集是us-ascii。

其实里面应该有一个用西里尔字母写的字符串(cp1251)。

我用的是python 2.7。

输出结果是:

>>> w=r'\xd7\xe5\xe\xff\xe1\xe8\xed\xf1\xea'
>>> w='\xd7\xe5\xe\xff\xe1\xe8\xed\xf1\xea'
ValueError: invalid \x escape
>>> w=r'\xd7\xe5\xe\xff\xe1\xe8\xed\xf1\xea'
>>> w.decode('raw_unicode_escape')
u'\\xd7\\xe5\\xe\\xff\\xe1\\xe8\\xed\\xf1\\xea'
>>> w.decode('utf-8')
u'\\xd7\\xe5\\xe\\xff\\xe1\\xe8\\xed\\xf1\\xea'
>>> unicode(w)
u'\\xd7\\xe5\\xe\\xff\\xe1\\xe8\\xed\\xf1\\xea'
>>> unicode(w, 'utf-8')
u'\\xd7\\xe5\\xe\\xff\\xe1\\xe8\\xed\\xf1\\xea'

我做了所有的尝试:解码成“utf-8”,用了unicode等等,但都没有变化。每次得到的字节都是一样的。

1 个回答

5

问题是,在你的 w 变量中,第三个 \x 转义字符后面缺少一个 b,所以才会出现无效转义的错误。

>>> w = '\xd7\xe5\xeb\xff\xe1\xe8\xed\xf1\xea'
>>> w.decode('cp1251')
u'\u0427\u0435\u043b\u044f\u0431\u0438\u043d\u0441\u043a'

撰写回答