python 중국어 디코딩 문제 해결 방법 총결산

이와 유사한 코드를 실행하려면 다음과 같이 하십시오.

#!/usr/bin/env pythons=" "print s
요즘 이런 문제가 자주 발생합니다.

질문 1:


SyntaxError: Non-ASCII character '\xe4' in file E:\coding\python\Untitled 6.py on line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

질문 2:


UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 108: ordinal not in range(128)

질문 3:


UnicodeEncodeError: 'gb2312' codec can't encode character u'\u2014' in position 72366: illegal multibyte sequence
이것들은 모두 문자 인코딩과 관련된 문제입니다. 답답합니다. 중국어는 항상 나오지 않고 많은 방안을 찾았습니다. 여기 몇 가지는 제가 며칠 전에 찾은 방안입니다. 꺼내서 여러분께 공유해 드리겠습니다.
문자열은Python 내부에서 유니버설 인코딩을 표시하기 때문에 인코딩 변환을 할 때 유니버설 인코딩을 중간 인코딩으로 해야 한다. 즉, 다른 인코딩된 문자열을 유니버설 인코딩(decode)으로 하고 유니버설 인코딩(encode)에서 다른 인코딩으로 해야 한다.
decode의 역할은 다른 인코딩된 문자열을 유니버설 인코딩으로 바꾸는 것입니다. 예를 들어str1.decode ('gb2312') 는 gb2312 인코딩된 문자열str1을 유니버설 인코딩으로 변환하는 것을 나타냅니다.
encode의 역할은 유니코드 인코딩을 다른 인코딩 문자열로 바꾸는 것이다. 예를 들어str2.encode ('gb2312') 는 유니코드 인코딩된 문자열str2를 gb2312 인코딩으로 변환하는 것을 나타냅니다.
일부 IDE에서 문자열의 출력은 항상 혼란스럽고 심지어 오류가 발생하는데, 사실은 IDE의 결과 출력 컨트롤러 자체가 문자열의 인코딩을 표시할 수 없기 때문이지 프로그램 자체의 문제가 아니다.
UliPad에서 다음 코드를 실행하는 경우:

s=u" "print s
다음과 같은 메시지가 표시됩니다.
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
이것은 UliPad가 영문 Windows XP에 있는 컨트롤러 정보 출력 창은 ascii 인코딩에 따라 출력되기 때문입니다. (영문 시스템의 기본 인코딩은 ascii) 위 코드의 문자열은 유니코드로 인코딩되어 출력할 때 오류가 발생했습니다.
마지막 구절을 (으)로 변경합니다.
'중국어'라는 두 글자를 정확하게 출력할 수 있다.
마지막 문장이 print s.encode('gb2312') 로 바뀌면
출력: print s.encode('utf8'), 이것은 컨트롤러 정보 출력 창이 ascii 인코딩에 따라utf8 인코딩된 문자열을 출력한 결과입니다.
다음 코드는 다음과 같이 일반적으로 사용될 수 있습니다.

#!/usr/bin/env python  #coding=utf-8  s=" "if isinstance(s,unicode):     #s=u" "      print s.encode('gb2312') else:     #s=" "      print s.decode('utf-8').encode('gb2312')#!/usr/bin/env python#coding=utf-8s=" "if isinstance(s,unicode): #s=u" " print s.encode('gb2312')else: #s=" " print s.decode('utf-8').encode('gb2312')
다음 코드를 참조하십시오.

#!/usr/bin/env python  #coding=utf-8  #python version:2.7.4 #system:windows xp    import httplib2def getPageContent(url):    '''''     httplib2 url      bytes utf-8     '''    # ie9 user-agent, user-agent 403      headers={'user-agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)',            'cache-control':'no-cache'}    if url:         response,content= httplib2.Http().request(url,headers=headers)                     if response.status== 200 :            return content

import sys  reload(sys)  sys.setdefaultencoding('utf-8')  # , ascci print sys.getdefaultencoding()   content= getPageContent("http://www.oschina.net/")print content.decode('utf-8').encode('gb2312')#!/usr/bin/env python#coding=utf-8#python version:2.7.4#system:windows xpimport httplib2def getPageContent(url):    '''     httplib2 url      bytes utf-8     '''    # ie9 user-agent, user-agent 403     headers={'user-agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)',            'cache-control':'no-cache'}    if url:         response,content= httplib2.Http().request(url,headers=headers)                   if response.status== 200 :            return content

import sysreload(sys)sys.setdefaultencoding('utf-8')  # , ascciprint sys.getdefaultencoding()content= getPageContent("//www.jb51.net/")print content.decode('utf-8').encode('gb2312')
위의 코드의 뜻: www.jb51.net 사이트에서 그의 홈페이지를 요청합니다. (직접utf-8인코딩이면 중국어를 출력할 수 없습니다.) 인코딩 방식을utf-8로 gd2312로 바꾸려고 합니다.
내가 그것\xe4\xb8\xad\xe6\x96\x87print content.decode('utf-8').encode('gb2312')으로 바꿨을 때, OK, 중국어를 표시할 수 있었지만, 전부인지 아닌지는 확실하지 않았다. 일부분만 있는 것 같았고, 일부는gb2312로 인코딩할 수 없었다
그러나, 내가 웹 사이트를 www.soso로 바꾸면.com 시 gb2312로 전환하지 않고utf-8로 중국어를 정상적으로 표시할 수 있습니다
요약:
파일에 ss를 직접 출력하면 같은 이상이 발생합니다.유니코드 중국어 문자열을 처리할 때, 우선 엔코드 함수를 호출하여 다른 인코딩 출력으로 변환해야 합니다.이 점은 각 환경에 모두 같다.Python에서'str'대상은 하나의 바이트 그룹으로 그 안의 내용이 합법적인 문자열인지, 그리고 이 문자열이 어떤 인코딩(gbk,utf-8,unicode)을 사용하는지는 중요하지 않다.이 내용들은 사용자 스스로 기록하고 판단해야 한다.이러한 제한도 유니코드 대상에도 적용된다.'유니코드'대상의 내용이 절대로 합법적인 유니코드 문자열이 아니라는 것을 기억해라. 우리는 곧 이런 상황을 보게 될 것이다.윈도우즈 컨트롤러에서 gbk 인코딩을 지원하는str 대상과 유니버설 인코딩을 지원하는 유니버설 대상입니다.
python 중국어 디코딩 문제 해결 방법에 대한 자세한 내용은 아래의 링크를 보십시오

좋은 웹페이지 즐겨찾기