Python은 UTF-8 BOM 헤더가 있는 json 파일을 로드합니다.
UTF-8 BOM 헤더(EFBBBF)를 사용하여 json 파일을 무조건 출력하는 다른 툴에서 생성된 파일을 해석해야 했습니다.Python 2.7 모듈이 해석할 수 없기 때문에 이것이 문제라는 것을 곧 알게 되었습니다.
>>> import json
>>> data = json.load(open('sample.json'))
ValueError: No JSON object could be decoded
BOM을 제거하면 해결되지만, BOM 헤더가 있는 json 파일을 해석할 수 있는 다른 방법이 있을까요?
다음을 사용하여 열 수 있습니다.codecs
:
import json
import codecs
json.load(codecs.open('sample.json', 'r', 'utf-8-sig'))
또는 로 해독합니다.utf-8-sig
자신에게 전달하다loads
:
json.loads(open('sample.json').read().decode('utf-8-sig'))
심플! Import 할 필요도 없습니다.codecs
.
with open('sample.json', encoding='utf-8-sig') as f:
data = json.load(f)
부터json.load(stream)
사용하다json.loads(stream.read())
후드 아래에 BOM을 지우는 작은 헤플러 함수를 쓰는 것도 나쁘지 않습니다.
from codecs import BOM_UTF8
def lstrip_bom(str_, bom=BOM_UTF8):
if str_.startswith(bom):
return str_[len(bom):]
else:
return str_
json.loads(lstrip_bom(open('sample.json').read()))
스트림을 랩하여 어떻게든 수정해야 하는 다른 상황에서는 에서 상속하는 것을 검토할 수 있습니다.codecs.StreamReader
.
키워드로도 할 수 있고
import codecs
with codecs.open('samples.json', 'r', 'utf-8-sig') as json_file:
data = json.load(json_file)
또는 그 이상:
import io
with io.open('samples.json', 'r', encoding='utf-8-sig') as json_file:
data = json.load(json_file)
만약 이게 일회성이라면, 나한테 효과가 있었던 아주 단순한 첨단 기술 솔루션이라면...
- 마음에 드는 텍스트에디터로 JSON 파일을 엽니다.
- 모두 선택
- 새 파일 만들기
- 붙여넣기
- 절약하다.
붐, BOM 헤더가 사라졌습니다!
Linux 명령어로 BOM을 수동으로 제거했습니다.
우선 나는 그것이 있는지 확인한다.efbb bf
파일의 바이트, 사용head i_have_BOM | xxd
.
그리고 나는 달린다dd bs=1 skip=3 if=i_have_BOM.json of=I_dont_have_BOM.json
.
bs=1
매회 1바이트를 처리한다.skip=3
첫 번째 3바이트를 건너뜁니다.
utf-8-sig를 import json에만 사용하고 있습니다.
with open('estados.json', encoding='utf-8-sig') as json_file:
data = json.load(json_file)
print(data)
언급URL : https://stackoverflow.com/questions/13156395/python-load-json-file-with-utf-8-bom-header
'source' 카테고리의 다른 글
카테고리가 있는 모든 WordPress 게시물을 추출하기 위한 SQL 쿼리 (0) | 2023.04.05 |
---|---|
MongoDB: 서버에 시작 경고가 있습니다. "데이터베이스에 대한 액세스 제어가 활성화되지 않았습니다." (0) | 2023.04.05 |
Angular.js를 통한 세션 유지 (0) | 2023.04.05 |
jQuery 팝업에서 WordPress 로그인 - jQuery Ajax 로그인을 검증하는 방법 (0) | 2023.04.05 |
이 표현식의 유형에는 영향을 주지 않습니다. (0) | 2023.04.05 |