python json.dumps 중국어 디코딩 문제 해결

json.dumps(var,ensure_ascii=False)는 중국어 부호 문제를 완전히 해결할 수 없습니다
json.dumps는 서로 다른 버전의 Python에서 서로 다른 표현을 할 수 있습니다. 아래에 언급된 중국어 디코딩 문제는Python3 버전에 존재하지 않습니다.
주: 다음 코드는python 2.7 버전에서 테스트 통과

# -*- coding: utf-8 -*-odata = {'a' : ' '}print odata
결과:

{'a': '\xe4\xbd\xa0\xe5\xa5\xbd'}

print json.dumps(odata)
결과:

{"a": "\u4f60\u597d"}

print json.dumps(odata,ensure_ascii=False)
결과:

{"a": " "}

print json.dumps(odata,ensure_ascii=False).decode('utf8').encode('gb2312')
결과:

{"a": " "}
중국어 인코딩을 해결하려면python2.7에서 문자열을 어떻게 처리하는지 알아야 합니다.
#--coding:utf-8--의 작용으로 파일 내용은utf-8로 인코딩되기 때문에print odata
출력은utf-8 인코딩 후의 결과입니다.

{‘a': ‘\xe4\xbd\xa0\xe5\xa5\xbd'}
json.dumps 서열화 시 중국어에 기본적으로 사용되는 ascii 인코딩, print json.dumps(odata) 유니코드 인코딩 결과 출력print json.dumps(odata,ensure_ascii=False) 사용하지 않는 ascii 인코딩, gbk로 인코딩‘ ' utf8로 인코딩하면 %E4%BD%A0%E5%A5%BDgbk로 인코딩하면 라쿤 문자열은 Python 내부의 유니코드 인코딩을 나타냅니다.
따라서 인코딩 변환을 할 때, 보통 유니코드를 중간 인코딩으로 해야 한다. 즉, 다른 인코딩된 문자열을 유니코드로 디코딩하고, 유니코드에서 다른 인코딩으로 디코딩해야 한다.
decode의 역할은 다른 인코딩된 문자열을 유니버설 인코딩으로 변환하는 것이다decode('utf-8')utf-8 인코딩된 문자열을 유니코드 인코딩으로 변환합니다.
encode의 역할은 유니코드 인코딩을 다른 인코딩의 문자열로 변환하는 것이다encode(‘gb2312')unicode 인코딩된 문자열을gb2312 인코딩으로 변환합니다.
python3에는 이런 문제가 없기 때문에 가장 간단한 방법은 __future__ 모듈을 도입하여 새로운 버전의 특성을 현재 버전으로 가져오는 것이다

from __future__ import unicode_literalsprint json.dumps(odata,ensure_ascii=False)
결과:

{"a": " "}
파일을 쓸 때 Python 2.7의 UnicodeEncodeError:'ascii'코덱 can't encode 이상 오류가 발생했습니다.
대신의 해결 방법:
open을 사용하여 파일을 열지 않고 codecs를 사용합니다.

from __future__ import unicode_literalsimport codecsfp = codecs.open('output.txt', 'a+', 'utf-8')fp.write(json.dumps(m,ensure_ascii=False))fp.close()
python 출력 중국어 부호 문제에 대한 자세한 내용은 아래의 링크를 보십시오

좋은 웹페이지 즐겨찾기