我正在掉落unicode地獄。如何在python中打印0xfb
我的環境在UNIX,蟒蛇2.7.3
LC_CTYPE=zh_TW.UTF-8
LANG=en_US.UTF-8
我想在人類可讀的格式轉儲十六進制編碼數據,這裏被簡化代碼
#! /usr/bin/env python
# encoding:utf-8
import sys
s=u"readable\n" # previous result keep in unicode string
s2="fb is not \xfb" # data read from binary file
s += s2
print s # method 1
print s.encode('utf-8') # method 2
print s.encode('utf-8','ignore') # method 3
print s.decode('iso8859-1') # method 4
# method 1-4 display following error message
#UnicodeDecodeError: 'ascii' codec can't decode byte 0xfb
# in position 0: ordinal not in range(128)
f = open('out.txt','wb')
f.write(s)
我只是想打印出0xfb。
我應該在這裏描述更多。關鍵是's + = s2'。 其中s將保留我以前解碼的字符串。 而s2是下一個應該附加到s中的字符串。
如果我修改如下,它發生在寫入文件。
s=u"readable\n"
s2="fb is not \xfb"
s += s2.decode('cp437')
print s
f=open('out.txt','wb')
f.write(s)
# UnicodeEncodeError: 'ascii' codec can't encode character
# u'\u221a' in position 1: ordinal not in range(128)
祝out.txt的結果是
readable
fb is not \xfb
或
readable
fb is not 0xfb
[解決方法]
#! /usr/bin/env python
# encoding:utf-8
import sys
import binascii
def fmtstr(s):
r = ''
for c in s:
if ord(c) > 128:
r = ''.join([r, "\\x"+binascii.hexlify(c)])
else:
r = ''.join([r, c])
return r
s=u"readable"
s2="fb is not \xfb"
s += fmtstr(s2)
print s
f=open('out.txt','wb')
f.write(s)
當你使用'encode',或者你得到*'utf8'編解碼器無法解碼時* *,你會得到*相同的*錯誤信息嗎? – kojiro
\ xfb不是UTF-8,那它是什麼? –
'\ xfb'是從二進制文件中讀取的二進制數據。我想顯示爲'0xfb或\ xfb'以供人類閱讀'。 –