需要转义JavaScript中的非ascii字符
Need to escape non-ASCII characters in JavaScript
是否有函数可以执行以下操作?
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;
}
相关文章:
- 修改 JavaScript 以使用 ASCII 字符或图像而不是文本
- 使用正则表达式测试字符串中的特定ASCII字符
- 如何将字符串中的ascii字符转换为jquery中的字符
- 使用Jquery仅切换按钮文本中的ASCII字符
- V8是否自动解析字符串中的ascii字符
- 从nodejs-crypto返回的字符串中修剪非ascii字符
- 将ASCII字符替换为等效字符
- 将ascii字符发送到mailto而不达到URL限制的最有效方法
- JavaScript 字符串中的转义控制和非 ASCII 字符(高位)
- 匹配除少数字符之外的 ASCII 字符
- 使字典中的键等于所有 ASCII 字符
- 使用 Javascript/Windows 批处理文件混合将非 ASCII 字符编码为 HTML
- 使用 Javascript REGEX 阻止特定范围的 ASCII 字符
- HTML 标签以 ASCII 字符显示
- Django表单中的非ASCII字符发出警告
- 如何将一组ascii字符转换为字符串
- Regex测试是否只有ASCII字符
- 如何在java脚本中对非ascii字符进行编码
- 编码URI(空格等)而不编码非ASCII字符
- 将2个ASCII字符与javascript进行比较