2017-09-20 3 views
0

jsonify('é')과 같이 예상대로 인쇄되지 않습니다. é 대신 é이 표시됩니다.Flask의 jsonify를 사용하면 à ©

app = Flask(__name__) 
app.config['JSON_AS_ASCII'] = False 

@app.route('/') 
def test(): 
    return jsonify('é') 

스크립트의 인코딩은 UTF-8입니다. UTF-8 JSON 인코딩은 JSON_AS_ASCII = False에 의해 활성화되어야합니다.

답변

1

덤프 된 데이터가 표시됩니다. JSON_AS_ASCII을 비활성화 했으므로 ASCII 호환 유니 코드 이스케이프가 아닌 두 개의 UTF-8 바이트가 생성됩니다. JSON은 사용자가 선택한 표현과 상관없이 여전히 UTF-8이지만 기본값을 고수하는 것이 일반적으로 안전합니다.

데이터를 보는 데 사용하는 것이면 바이트를 UTF-8이 아닌 Latin-1로 오인하는 것입니다. UTF-8이라는 데이터를보고 무엇이든지 말해 주면 정확할 것입니다. JSON에서 데이터를로드하면 여전히 올바른지 확인할 수 있습니다.

from flask import Flask, jsonify, json 

app = Flask('example') 
app.config['JSON_AS_ASCII'] = True # default 

with app.app_context(): 
    print(jsonify('é').data) # b'"\\u00e9"\n', Unicode escape 

app.config['JSON_AS_ASCII'] = False 

with app.app_context(): 
    print(jsonify('é').data) # b'"\xc3\xa9"\n', UTF-8 bytes 

# you're viewing the bytes as Latin-1 
print(b'\xc3\xa9'.decode('latin1')) # é 

# but it's UTF-8 
print(b'\xc3\xa9'.decode('utf8')) # é 

# JSON is always UTF-8 
print(json.loads(b'"\\u00e9"\n') # é 
print(json.loads(b'"\xc3\xa9"\n') # é 
+0

감사합니다. 그러나 jsonify를 사용하여 'é'를 인쇄하는 코드를 수정하는 방법은 아직 이해가되지 않습니다. –

+1

수정할 것이 없습니다. 바이트를보고있는 모든 내용을 표시하기 위해 잘못된 인코딩을 선택하는 것이지만 JSON은 항상 UTF-8입니다. UTF-8을 선택하면 올바르게 표시됩니다. 데이터를로드하면 올바른 것입니다. – davidism

+0

Chrome에서 @host.route ('/'로 정의 된 경로)로 이동하여 Chrome에서 바이트를보고 있습니다. –