입출력 작업 오류 - 인코딩 오류 해결

4836 단어
일반적인 파일 작업 오류:
파충류가 잡은 데이터를 fp로 이용합니다.read()가 html 파일을 쓸 때 이런 오류가 발생했습니다.
fp.write(resp.read().decode('utf-8'))
UnicodeEncodeError: 'gbk' codec can't encode character '\u265a' in position 29849: illegal multibyte sequence

원본 코드:
dapeng_url = 'http://www.renren.com/880151247/profile'

headers = {
    'User-Agent': ' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36',
    'Cookie':'anonymid=k9eczqdm-gfvnyo; depovince=SC; _r01_=1; JSESSIONID=abcMSkyFADL94d3mO1Sgx; taihe_bi_sdk_uid=1ebf7936c64f3f2130023bce5e6e2815; taihe_bi_sdk_session=ad4df8ad6b8edb53dcc8e7da0b0c8fa7; ick_login=8d910276-bd77-40b0-9102-74b47d9020ce; loginfrom=null; jebe_key=b3c7ff86-8e28-44dd-a55e-980db1344357%7Cd5e488df1f678d5bc1e4d38602b9674b%7C1587742685578%7C1%7C1587742686852; jebe_key=b3c7ff86-8e28-44dd-a55e-980db1344357%7Cd5e488df1f678d5bc1e4d38602b9674b%7C1587742685578%7C1%7C1587742686853; wp_fold=0; wp=0; t=018c8a38cd75aca63f06a7dcd81e56250; societyguester=018c8a38cd75aca63f06a7dcd81e56250; id=974296580; xnsid=5322372b; jebecookies=5f00a0cb-56fa-4d5b-a781-1ab4747cc148|||||; ver=7.0'
}
req = request.Request(url=dapeng_url,headers=headers)
resp = request.urlopen(req)
with open('./renren.html','w') as fp:
    # write        str     
    # resp.read     bytes    ,      
    # bytes--->decode--->str
    # str ---->encode--->bytes
    fp.write(resp.read().decode('utf-8'))

해결 방향
encoding은 지정한 파일의 인코딩 방식에 사용되며 기본적으로utf-8을 사용합니다. 인코딩 방식은 주로 파일의 문자 인코딩을 가리킵니다.우리는 파일을 열 때 내용이 모두 엉망이 되는 경우를 자주 볼 수 있다. 이것은 파일을 만들 때 사용하는 인코딩 방식과 파일을 열 때의 인코딩 방식이 다르면 문자 표시 오류가 발생하고, 보기에 엉망이 되기 때문이다.open() 함수에 encoding='utf-8'를 추가하여 문제 해결
with open('./renren.html','w',encoding='utf-8') as fp:
    # write        str     
    # resp.read     bytes    ,      
    # bytes--->decode--->str
    # str ---->encode--->bytes
    fp.write(resp.read().decode('utf-8'))

좋은 웹페이지 즐겨찾기