如何指定来自服务器端的字符串编码?

时间:2018-11-04 05:30:45

标签: javascript flask unicode encoding

对于Web开发,我相对较新,而在前端方面则不那么熟悉。我在编码方面遇到了问题。

  • 环境:python 2.7,烧瓶

我正在将json数据发送到这样的服务器。

@app.route("/test")
def test():
    data = json.dumps({"name": "홍길동", "id": "gildong1"}, ensure_ascii=False)
    return render_template("testpage.html", data=data)

我在服务器端打印了数据,并打印出韩文字符。

但是每当我在javascript中收到这样的数据时:

var t_data = JSON.parse({{data}});

控制台中的结果如下:

var t_data = JSON.parse({"name": "홍길동", "id": "gildong1"});

更新

我对内容类型标题感到怀疑。通过调试器对其进行检查时,发现 Content-Type 标头为 u'text / html'。 因此,我试图像这样更改代码,但它仍会打印unicode:

@app.route("/test")
def test():
    data = json.dumps({"name":"홍길동", "id": "gildong1"}, ensure_ascii=False).encode("utf8")
    resp = make_response(render_template("TestPage.html", data=data))
    resp.headers['Content-Type'] = 'text/html'
    return resp

2 个答案:

答案 0 :(得分:0)

您可以在服务器端将响应编码为

转换您的行

`data = json.dumps({"name": "홍길동", "id": "gildong1"}, ensure_ascii=False)` 

`data = json.dumps({"name": "홍길동", "id": "gildong1"}, ensure_ascii=False).encode('utf8')`

OR

使用正则表达式在客户端处理此问题,以将所有出现的"替换为"

var input = '{"name": "홍길동", "id": "gildong1"}'
input = input.replace(/(")/g,'"');
console.log(input); // {"name": "홍길동", "id": "gildong1"}

答案 1 :(得分:0)

您是否尝试过jsonify()而不是json.dumps()? 参见here和这段小代码

from flask import Flask, jsonify, json
app = Flask(__name__)
data = json.dumps({"name":"홍길동", "id": "gildong1"})
with app.app_context():
  data2 = jsonify(name="홍길동", id= "gildong1")
print (data)
print(data2.get_json())
# output
# {"id": "gildong1", "name": "\ud64d\uae38\ub3d9"}
# {'id': 'gildong1', 'name': '홍길동'}