【问题标题】:How can I specify encoding of string that comes from server side?如何指定来自服务器端的字符串的编码?
【发布时间】:2018-11-04 05:30:44
【问题描述】:

我对 Web 开发相对较新,对前端方面更不熟悉。我遇到了关于编码问题的问题。

  • 环境:python 2.7,Flask

我正在向这样的服务器发送 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

【问题讨论】:

    标签: javascript flask unicode encoding


    【解决方案1】:

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

    换行

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

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

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

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

    【讨论】:

    • 谢谢,但是javascript中没有我可以选择哪种编码的默认选项吗?
    • 将您的线路data = json.dumps({"name": "홍길동", "id": "gildong1"}, ensure_ascii=False) 转换为data = json.dumps({"name": "홍길동", "id": "gildong1"}, ensure_ascii=False).encode('utf8')
    • @KimHyungJune 我已经更新了答案。您可以在进行json.dumps 调用时在服务器端执行此操作
    • 其实我之前也试过你的建议,但结果是一样的。
    【解决方案2】:

    您是否尝试过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': '홍길동'}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-13
      • 2018-10-03
      • 1970-01-01
      • 2010-10-07
      • 2011-12-20
      • 1970-01-01
      • 2019-11-11
      • 2021-07-22
      相关资源
      最近更新 更多