如何将非ASCII字符编码为express / jade中的\ uXXXX序列

时间:2013-03-24 08:51:00

标签: node.js unicode express escaping pug

我有以下快递路线:

var data = [
    {
        id: 1,
        title: 'aide-memoire'
    },
    {
        id:2,
        title: 'apres moi'
    }
];

app.get('/', function (req, res) {
    res.render('photo/list', {
        data: data
    });
});

在我的JADE模板中,我得到的数据如下:

!!!5
html
    head
    body
        script
            var data = !{JSON.stringify(calculates)};

但是我在这样的客户端上得到了这个数据数组:

<!DOCTYPE html>
<html>
    <head></head>
    <body>
        <script type="text/javascript">
        var data = [
            { "id":1, "title": 'aide-memoire'},
            { "id":2, "title": 'apres moi'}
        ];
        </script>
    </body>
</html>

但我需要将非ASCII字符编码为\ uXXXX序列,如下所示:

[
    {"id":1, "title": "aide-m%E9moire"},
    {"id":2, "title": "apr%E8s%20moi"}  
]

我怎样才能在快递/玉器中做到这一点?

1 个答案:

答案 0 :(得分:6)

JSON.stringify(["ä", "ä"]).replace(/[\u0080-\uFFFF]/g, function(m) {
    return "\\u" + ("0000" + m.charCodeAt(0).toString(16)).slice(-4);
});
//["\u00e4","\u00e4"]

JSON.stringify([{title: "ä"}, {title: "ä"}]).replace(/[\u0080-\uFFFF]/g, function(m) {
    return "\\u" + ("0000" + m.charCodeAt(0).toString(16)).slice(-4);
});
//[{"title":"\u00e4"},{"title":"\u00e4"}]

虽然这完全没用,并且它无需CPU来提供更大的响应:/请记住,node.js中使用的每个CPU周期都是一个CPU周期,除非你集群,否则整个服务器都会关闭。