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);

您可以使用迭代器构建数组,对其进行处理,然后将数组转换回字符串,如其他答案所示。