我正在尝试切片包含 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);
您可以使用迭代器构建一个数组,对其进行处理,然后将数组重新转换为字符串,如其他答案所示。