需要转义JavaScript中的非ascii字符

Need to escape non-ASCII characters in JavaScript

本文关键字:ascii 字符 转义 JavaScript      更新时间:2023-09-26

是否有函数可以执行以下操作?

var specialStr = 'ipsum áá éé lore';
var encodedStr = someFunction(specialStr);
// then encodedStr should be like 'ipsum 'u00E1'u00E1 'u00E9'u00E9 lore'

我需要对超出ASCII范围的字符进行编码,并且需要使用该编码进行编码。我不知道它的名字。也许是Unicode ?

这应该能奏效:

function padWithLeadingZeros(string) {
    return new Array(5 - string.length).join("0") + string;
}
function unicodeCharEscape(charCode) {
    return "''u" + padWithLeadingZeros(charCode.toString(16));
}
function unicodeEscape(string) {
    return string.split("")
                 .map(function (char) {
                     var charCode = char.charCodeAt(0);
                     return charCode > 127 ? unicodeCharEscape(charCode) : char;
                 })
                 .join("");
}
例如:

var specialStr = 'ipsum áá éé lore';
var encodedStr = unicodeEscape(specialStr);
assert.equal("ipsum ''u00e1''u00e1 ''u00e9''u00e9 lore", encodedStr);

如果你需要十六进制编码而不是unicode,那么你可以将@Domenic的答案简化为:

"aäßåfu".replace(/./g, function(c){return c.charCodeAt(0)<128?c:"''x"+c.charCodeAt(0).toString(16)})
returns: "a'xe4'xdf'xe5fu"

仅供参考,您可以按照Domenic所说的或使用escape函数,但这将生成不同格式的unicode(更适合浏览器):

>>> escape("áéíóú");
"%E1%E9%ED%F3%FA"

这对我有用。特别是当使用Dropbox REST API时:

   encodeNonAsciiCharacters(value: string) {
        let out = ""
        for (let i = 0; i < value.length; i++) {
            const ch = value.charAt(i);
            let chn = ch.charCodeAt(0);
            if (chn <= 127) out += ch;
            else {
                let hex = chn.toString(16);
                if (hex.length < 4)
                    hex = "000".substring(hex.length - 1) + hex;
                out += "''u" + hex;
            }
        }
        return out;
    }