JavaScript and UTF-8 coding

JavaScript and UTF-8 coding

本文关键字:coding UTF-8 and JavaScript      更新时间:2023-09-26

<script type="text/javascript" charset="UTF-8">似乎不做工作:(

我将从头开始,因为我正在寻找的解决方案可能不是我想要的。

所以我用的是一个简单的CRM。它的一个"简单"的功能是注册一个客户的请求,这个客户的请求还没有在Customers数据库中——如果CRM找不到与所提供的客户名称匹配的客户,那么就注册新客户。这个非常流行的特性导致许多Customers实体除了公司名称属性外,其他属性都是空的。

后来用户确实添加了联系人属性,但工作流程相当缓慢和无聊。为了加快速度,我写了一个python函数,它根据客户在本地黄页上的名字查找客户,解析HTML并将其转换为dict()。这需要一些时间,所以我把它放在单独的查询页面上,这是JavaScript在请求时显示的。

查询页面将dictionary呈现为如下字符串:[{'name': '"AG 'xc4'x80bolti'xc5'x86a b'xc5'xabvuz'xc5'x86'xc4'x93mums", SIA', 'phone': '67244222'}] 注意文字UTF-8编码

$.get('/zl?name=AG SIA ĀBOLTIŅA BŪVUZŅĒMUMS', function(data){...以与上面相同的方式检索。将检索到的数据字符串转换为对象result = eval(data)[0]。因此,现在$('#zl').html(result.name)"AG ÄboltiÅa bÅ«vuzÅÄmums", SIA不是"ĀBOLTIŅA BŪVUZŅĒMUMS",因为它应该。

我有<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>在页眉和脚本开始与<script type="text/javascript" charset="UTF-8">,但没有任何帮助。

所以问题:

  1. 如何设置JS输出的适当编码?有没有像string.toProperUTF-8()那样的技巧方法?
  2. 是否有一种方法来.decode(UTF-8) python字典而不会导致服务器错误?
  3. 有更少问题的方法吗?

这不起作用,因为Javascript和Python有不同的字符转义语义

如果我没弄错的话,你是在eval json你可以把它变成一个对象,当它到达你的javascript。

请不要这样做

相反,使用python内置的json模块用正确格式化的json来回复请求,然后在javascript中使用JSON.parse()来读取回复。这将确保解析正确进行。

一个简单的例子,从python开始:

import json 
# lots of code...
@route("/my_page")
def my_page(request):
  return json.dumps({
    "siblings":["Eenie", "Meanie", "Meinie", "Mo"], 
    "ages":[1,2,3,4]
  })
# lots more code...

现在从Javascript调用:

$.getJSON('/my_page', function(data, textStatus, jqXHR) {
  /* Do stuff with the object */
});

注意我是如何使用jQuery内置的getJSON()来获取对象的。您也可以使用普通的AJAX和JSON.parse()

为什么eval()是一个坏主意

使用eval而不是JSON.parse()实际上会使您的代码暴露于大量安全漏洞中。如果恶意用户(或分心的开发人员)可以在请求中放置JavaScript代码,那么代码就可以自由支配您的页面,这会危及用户的安全性,并可能导致一些非常难以发现的错误。生产页面在任何情况下都不应该使用eval(),特别是当被评估的数据是不可信的,就像它来自网络一样。

关于mime类型的随机注释

虽然这在大多数情况下不会导致问题,但您应该确保python代码为JSON返回正确的mime类型。如果做错了,可能会导致难以调试的奇怪问题。这取决于你使用的python框架。