谷歌脚本与电报机器人网络挂钩。我希望将来自机器人的消息分成我需要的部分并发送到 Google 电子表格。提取表情符号时出现问题
var contents = JSON.parse(e.postData.contents);
var text = contents.message.text
var textar = text.split("");
var sheet = SpreadsheetApp.openById(ssId);
sheet.getSheetByName(sheetName).appendRow([text,textar[4]]);
因此,我收到了原始文本 + 一个特定字符(肯定会有一个表情符号)。但是,“?”出现在表格中,尽管在相邻单元格中,表情符号在整个消息中完美显示。如何更改代码以使脚本正确发送表情符号进行录制并且不会丢失?
text.split("");
仅正确拆分由以 UTF-16 编码(代码单元)编码为两个字节的 Unicode 字符组成的字符串。Emoji 通常被编码为四个字节(2 个代码单元),因此它们被分成所谓的代理对的两个部分,每个部分不能是一个独立的字符,并且在显示时用问号表示。可以使用[...text]
表达式进行正确的拆分,因为在现代 JavaScript 中,字符串支持迭代协议,该协议将其拆分为独立于编码(代码点)的字符。所以试试:你可以阅读更多:
每个软件开发人员绝对、绝对必须了解 Unicode 和字符集的绝对最低要求(没有任何借口!) – Joel on Software
每个 JavaScript 开发人员都应该了解 Unicode
JavaScript 存在 Unicode 问题 Mathias Bynens
ES2015 Mathias Bynens 中的 Unicode 感知正则表达式
深度解析 ES6 字符串(和 Unicode,❤)
乔纳森新 | "💩".length === 2
PS 如果你仅限于使用 ES5,你可以尝试 polyfills
String.prototype.codePointAt()
+String.fromCodePoint()
references 的组合(即text.split("")[4]
替换为String.fromCodePoint(text.codePointAt(4))
)。