url에서 html 콘텐츠를 가져 와서 html 콘텐츠를 정규 표현식으로 파싱하고 싶습니다. 그러나 HTML 콘텐츠에는 몇 바이트의 멀티 바이트 문자가 있습니다. 그래서 제목에 설명 된 오류를 만났습니다.UnicodeEncodeError : 'gbk'코덱이 문자를 인코딩 할 수 없습니다 : 불법 멀티 바이트 시퀀스
누군가이 문제를 해결하는 방법을 말해 줄 수 있습니까?
url에서 html 콘텐츠를 가져 와서 html 콘텐츠를 정규 표현식으로 파싱하고 싶습니다. 그러나 HTML 콘텐츠에는 몇 바이트의 멀티 바이트 문자가 있습니다. 그래서 제목에 설명 된 오류를 만났습니다.UnicodeEncodeError : 'gbk'코덱이 문자를 인코딩 할 수 없습니다 : 불법 멀티 바이트 시퀀스
누군가이 문제를 해결하는 방법을 말해 줄 수 있습니까?
(1) 사용 된 코드 (2) 전체 오류 및 추적 (3) 관련 URL (4) 시도하고있는 문자 유니 코드을 표시하려면 질문을 편집해야합니다. ~ 인 코드 gbk
당신은 어떻게 든 html 콘텐츠의 원시 바이트에서 유니 코드 문자를 얻은 것 같습니다. 어떻게? html 콘텐츠에 어떤 인코딩이 지정되어 있습니까?
그러면 유니 코드 문자를 파일에 쓰려고하고 유니 코드를 gbk로 끝내려고합니다. HTML 콘텐츠의 원시 바이트 GBK로 인코딩되지 않은 경우, 당신이 표현 될 수없는 유니 코드 문자를 가지고 매우 가능하다
>>> u'\uffff'.encode('gbk')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'gbk' codec can't encode character u'\uffff' in position 0: illegal multibyte sequence
>>>
:이 과정에서이 같은 오류 뭔가있어 in gbk. 이 경우 원본 인코딩을 사용하여 결과를 인코딩하거나 유니 코드 문자를 사용할 수있는 gb18030으로 인코딩 할 수 있습니다.
또 다른 가능성은 당신이 원시 바이트 또는 유니 코드를 어떻게 든 맹 글링했다는 것입니다. 나는 확실히 당신의 정규식 음모 등, GB2312, GBK 같은 일부 가변 길이 문자 인코딩에 유니 코드에하지 행해졌 희망
업데이트 : 당신의 코드가 여기
입니다 :
import sys, urllib.request
url = "http://www.meilishuo.com"
wp = urllib.request.urlopen(url)
content = wp.read()
str_content = content.decode('utf-8')
fp = open("web.txt","w")
fp.write(str_content)
fp.close()
에서 나는 추론 했어 :
(1) 파이썬 3.x를
(2) sys.defaultencoding을 실행 == "GBK"- 그렇지 않으면 오류를 가지고 않을 것 메시지 일부를 repo 더 일찍 rted.
내 sys.defaultencoding은 'gbk'가 아니므로 최근 3 줄을 gbk_content = str_content.encode('gbk')
으로 바꿨고 수정 된 코드 조각을 Python 3.1.2에서 실행했습니다.
관찰 :
(1)의 웹 사이트는 UTF-8로 OK 디코딩 = 문자셋있다 UTF-8
(2) 에러 메시지가 UnicodeEncodeError: 'gbk' codec can't encode character '\u2764' in position 35070: illegal multibyte sequence
\u2664
는 딩뱃 (HEAVY BLACK HEART)이다. 웹 사이트는 동적입니다. 다른 시도에서 첫 번째로 문제가되는 문자는 \ xa9 (COPYRIGHT SIGN)입니다.
그래서 웹 페이지에는 gbk로 매핑되지 않은 유니 코드 문자가 포함되어 있습니다.옵션
가 (1) 'GBK'로 인코딩 만 사용하는있습니다 유니 코드 문자 (UTF-8, GB18030)하고있는 당신이 GBK에없는 모든 문자를 렌더링하는 디스플레이 메커니즘이
@ user351637 : 질문을 편집하십시오; 그러한 정보를 주석에 넣지 마십시오. –
감사합니다 John, 이미 해결됨 – Joseph
@ user351637 : 감사합니다 upvote; 결의안은 무엇 이었습니까? –
는 시도
open(file, 'r', encoding='utf-8')
대신
,381,
Re. regex를 사용하여 HTML 컨텐트를 파싱하는 방법은 다음을 참조하십시오. http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –
@Alan Moore, @ Vinay Sajip : 문제는 html이나 regex와는 아무런 관련이 없습니다. 이것은 간단한 유니 코드 인코딩 문제로 드러납니다. 이를 반영하기 위해 태그를 수정 중입니다. –