[HTML & JSON] \xa0(&nbsp) 처리하기

alirz-pixel·2022년 8월 7일
0

error

json.decoder.jsondecodeerror: invalid \escape: line 1 column 2648 (char 2647)

위의 에러는 유니코드로 긁어와진 JSON 데이터를
utf-8 + 딕셔너리로 변환하는 과정에서 발생한 문제이다.

문제코드

data = json.loads(flask.request.data)
r = subprocess.run(['python', 'main.py', data['user_id']], stdout=subprocess.PIPE)
state_data = json.loads(r.stdout.decode('utf-8'))
return json.dumps(state_data, ensure_ascii=False, indent=2)

원인

'줄 바꿈 없는 공백'
즉, HTML에서 사용되어지는 &nbsp가 utf-8 형태로 변환되지 않아 발생한 문제였다.
(변환을 해도 \xa로 출력됨)

에러처리

단순히 \xa를 공백으로 변환해주면 끝나는 문제이다.

data = json.loads(flask.request.data)
r = subprocess.run(['python', 'main.py', data['user_id']], stdout=subprocess.PIPE)
state_data = json.loads(r.stdout.decode('utf-8').replace("'", '"').replace('\\0xa', ' ')
return json.dumps(state_data, ensure_ascii=False, indent=2)

추가적으로 replace("'", '"')를 해준 것을 볼 수 있는데,
문자열의 경우, JSON 표준에는 큰 따음표만 사용가능하도록 되어있기 때문이다.

0개의 댓글