입출력 작업 오류 - 인코딩 오류 해결
파충류가 잡은 데이터를 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'))
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.