JavaScript unicode 识别字符串切片
JavaScript unicode aware string slice
我正在尝试对包含 Unicode 字符的字符串进行切片。但它 returns 是一个替换字符。这是我的示例代码。
let str = ' ';
str = str.slice(0, -1);
console.log(str);
结果如下
" �"
如何去掉替换字符?
试试这个,它不会将一个 4 字节的字符分成 2 个:
let str = ' ';
str = [...str].slice(0, -1).join('');
console.log(str);
那是因为你的是一个surrogate pair,这意味着它被表示为四个字节(两个代码单元á2个字节,UTF-16)。由于 .slice
适用于代码单元(与所有其他字符串方法一样),您需要切掉 对 :
let str = ' ';
str = str.slice(0, -2);
console.log(str);
要使用代码点而不是代码单元,您可以使用迭代器字符串,它将遍历 代码点 (即字符串的一个字符可能是具有两个字符的字符串):
let str = ' ';
for(const char of str)
console.log(char, char.length);
您可以使用迭代器构建数组,对其进行处理,然后将数组转换回字符串,如其他答案所示。
我正在尝试对包含 Unicode 字符的字符串进行切片。但它 returns 是一个替换字符。这是我的示例代码。
let str = ' ';
str = str.slice(0, -1);
console.log(str);
结果如下
" �"
如何去掉替换字符?
试试这个,它不会将一个 4 字节的字符分成 2 个:
let str = ' ';
str = [...str].slice(0, -1).join('');
console.log(str);
那是因为你的是一个surrogate pair,这意味着它被表示为四个字节(两个代码单元á2个字节,UTF-16)。由于 .slice
适用于代码单元(与所有其他字符串方法一样),您需要切掉 对 :
let str = ' ';
str = str.slice(0, -2);
console.log(str);
要使用代码点而不是代码单元,您可以使用迭代器字符串,它将遍历 代码点 (即字符串的一个字符可能是具有两个字符的字符串):
let str = ' ';
for(const char of str)
console.log(char, char.length);
您可以使用迭代器构建数组,对其进行处理,然后将数组转换回字符串,如其他答案所示。