如何在javascript中放入unicode字符

net*_*zer 1 javascript unicode backend

我使用BaaS作为我的前端.它允许我使用我的后端逻辑上传一个javascript文件.我可以在客户端通过REST API使用它.在其他服务中,我实施了本地化服务.字符串预定义如下:

var locals = {
"EN": {
    "1": "Home",
    "2": "Ready"
},
"BG": {
    "1": "??????",
    "2": "??????"
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我提供英语和保加利亚字符串的本地化.问题是BaaS系统不尊重西里尔字符(Unicode).当我上传包含上述内容的脚本时,所有的西里尔字符都替换为"????".

我可以使用此方法来解决问题,但不推荐使用escape/unescape函数.有没有更好的解决方案?避免这个问题的最有效方法是什么?

bob*_*nce 6

要在未提供Unicode安全的JavaScript文件中引用非ASCII字符,请使用JS字符串文字字符转义:\uNNNN其中NNNN是与字符串关联的UTF-16代码单元的十六进制数字(与代码点相同)基本多语言平面中这些字符的数字).

"BG": {
    "1": "\u041d\u0430\u0447\u0430\u043b\u043e",
    "2": "\u0413\u043e\u0442\u043e\u0432\u043e"
}
Run Code Online (Sandbox Code Playgroud)

这里是西里尔字符的代码点列表.您也可以使用Firefox的toSource方法为您解决问题:

> '??????'.toSource()
(new String("\u041D\u0430\u0447\u0430\u043B\u043E"))
Run Code Online (Sandbox Code Playgroud)

当我上传包含上述内容的脚本时,所有的西里尔字符都替换为"????".

你确定这是"BaaS"的错吗?我们无法告诉你,因为你没有告诉我们这项服务是什么,甚至没有告诉我们它是什么类型的服务.

如果它是通过Ajax获取的JS文件,则需要将文件保存为UTF-8编码,以便能够使用非ASCII字符,而无需按上述方式对其进行编码.如果要将其包含在脚本元素中,则还需要将HTML页面保存为UTF-8并包含UTF-8 meta charset指令.