나는 유니 코드 지옥에 떨어지고 있습니다. 유닉스에서의파이썬에서 0xfb를 출력하는 방법
가내 환경, 파이썬 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에 추가해야하는 다음 문자열입니다.
다음과 같이 수정하면 쓰기 파일에서 발생합니다. 내가 out.txt의 결과를 원하는
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)
는
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)
'인코딩'을 사용하거나 * 'utf8'코덱을 디코딩 할 수없는 경우 * 같은 * 오류 메시지가 표시됩니까? *? – kojiro
\ xfb는 UTF-8이 아니므로 무엇입니까? –
'\ xfb'는 바이너리 파일에서 읽은 바이너리 데이터입니다. 나는 '0xfb 또는 인간이 읽을 수있는 \ xfb'로 표시하려고합니다. –