728x90
반응형
질문 : json.dumps가있는 utf-8 텍스트를 \ u 이스케이프 시퀀스가 아닌 UTF8로 저장
샘플 코드 :
>>> 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에 대한주의 사항
Python 2의 경우 고려해야 할 몇 가지주의 사항이 더 있습니다. 이것을 파일에 쓰는 경우 open()
() 대신 io.open()
사용하여 작성하는 동안 유니 코드 값을 인코딩하는 파일 객체를 생성 한 다음 해당 파일에 쓰는 대신 json.dump()
:
with io.open('filename', 'w', encoding='utf8') as json_file:
json.dump(u"ברי צקלה", json_file, ensure_ascii=False)
ensure_ascii=False
플래그가 unicode
와 str
객체의 혼합 을 생성 할 수 json
모듈에 버그가 있습니다. Python 2의 해결 방법은 다음과 같습니다.
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/saving-utf-8-texts-with-json-dumps-as-utf8-not-as-u-escape-sequence
728x90
반응형
'프로그래밍 언어 > Python' 카테고리의 다른 글
파이썬에서 배열에 항목을 선언하고 추가하는 방법 (0) | 2021.09.30 |
---|---|
목록에서 del, remove 및 pop의 차이점 (0) | 2021.09.30 |
파이썬에서 두 목록을 비교하고 일치 항목을 반환하는 방법 (0) | 2021.09.29 |
파이썬에서 두 배열을 연결하는 방법 (0) | 2021.09.29 |
딕셔너리의 문자열 표현을 딕셔너리으로 변환하는 방법 (0) | 2021.09.29 |