본문 바로가기
파이썬

파이썬 json.dumps의 utf-8 텍스트를 \ u 이스케이프 시퀀스가 ​​아닌 UTF8로 저장

by º기록 2021. 1. 8.
반응형

샘플 코드 :

>>> import json
>>> json_string = json.dumps("??? ????")
>>> print json_string
"\u05d1\u05e8\u05d9 \u05e6\u05e7\u05dc\u05d4"

문제는 사람이 읽을 수 없다는 것입니다. 내 (스마트 한) 사용자는 JSON 덤프를 사용하여 텍스트 파일을 확인하거나 편집하기를 원하며 XML을 사용하지 않습니다.

객체를 UTF-8 JSON 문자열 ( \ uXXXX 대신)으로 직렬화하는 방법이 있습니까?

 

해결 방법

 

ensure_ascii = False 스위치를 json.dumps () 로 사용한 다음 값을 수동으로 UTF-8로 인코딩합니다.

>>> json_string = json.dumps("??? ????", ensure_ascii=False).encode('utf8')
>>> json_string
b'"\xd7\x91\xd7\xa8\xd7\x99 \xd7\xa6\xd7\xa7\xd7\x9c\xd7\x94"'
>>> print(json_string.decode())
"??? ????"

파일에 쓰는 경우 json.dump () 를 사용하고 인코딩 할 파일 객체에 남겨 둡니다.

with open('filename', 'w', encoding='utf8') as json_file:
    json.dump("??? ????", json_file, ensure_ascii=False)

Python 2 용주의 사항


with io.open('filename', 'w', encoding='utf8') as json_file:
    json.dump(u"??? ????", json_file, ensure_ascii=False)


with io.open('filename', 'w', encoding='utf8') as json_file:
    data = json.dumps(u"??? ????", ensure_ascii=False)
    # unicode(data) auto-decodes data to unicode if str
    json_file.write(unicode(data))

Python 2에서 UTF-8로 인코딩 된 바이트 문자열 (유형 str )을 사용할 때 encoding 키워드도 설정해야합니다.

>>> d={ 1: "??? ????", 2: u"??? ????" }
>>> d
{1: '\xd7\x91\xd7\xa8\xd7\x99 \xd7\xa6\xd7\xa7\xd7\x9c\xd7\x94', 2: u'\u05d1\u05e8\u05d9 \u05e6\u05e7\u05dc\u05d4'}

>>> s=json.dumps(d, ensure_ascii=False, encoding='utf8')
>>> s
u'{"1": "\u05d1\u05e8\u05d9 \u05e6\u05e7\u05dc\u05d4", "2": "\u05d1\u05e8\u05d9 \u05e6\u05e7\u05dc\u05d4"}'
>>> json.loads(s)['1']
u'\u05d1\u05e8\u05d9 \u05e6\u05e7\u05dc\u05d4'
>>> json.loads(s)['2']
u'\u05d1\u05e8\u05d9 \u05e6\u05e7\u05dc\u05d4'
>>> print json.loads(s)['1']
??? ????
>>> print json.loads(s)['2']
??? ????

 

참조 페이지 https://stackoverflow.com/questions/18337407

 

 

반응형

댓글