JavaScript Unicode 感知字符串切片



我正在尝试切片包含 Unicode 字符的字符串。 但它返回替换字符。 这是我的示例代码。

let str = '𝒽𝑒𝓁𝓁𝑜 𝓌𝑜𝓇𝓁𝒹';
str = str.slice(0, -1); 
console.log(str);

这给了我下面的结果

"你好沃尔">

如何摆脱替换角色?

试试这个,它不会将 4 字节字符分成 2 个:

let str = '𝒽𝑒𝓁𝓁𝑜 𝓌𝑜𝓇𝓁𝒹';
str = [...str].slice(0, -1).join(''); 
console.log(str);

这是因为您的 d 是一个代理项对,这意味着它表示为 4 个字节(两个代码单元 á 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);

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

最新更新