在我的BQ数据库表中,我有一个名为payload
的列,其中包含原始的facebook-webhooks JSON有效载荷作为字符串。其中一个包含带有类似Sample
的表情符号的文本。在大查询中,它看起来像
{"object":"page","entry":[{"id":"xxxx","time":1602757469275,"messaging":[{"sender":{"id":"xxxx"},"recipient":{"id":"xxxx"},"timestamp":1602757469062,"message":{"mid":"m_xxxx","text":"Sample ud83cudfe6","quick_reply":{"payload":"{"key": "value"}"},"tags":{"source":"source"}}}]}]}
我想创建一个具有列text
的视图,该列具有从原始json中提取的text
字段值。我创建了一个类似sql的
SELECT
JSON_EXTRACT_SCALAR(payload, '$.entry[0].messaging[0].message.text') as text,
FROM `my_table.facebook.webhook_received`
遗憾的是,我得到的结果看起来像Sample ��
有人知道如何让大查询正确解码表情符号吗?或者至少不要把它改成�标志?
您嵌入的这些字符不适用于银行图标,我相信这是您的问题。在BQ中运行以下操作,返回所需的表情符号:select " Sample U0001f3e6"
参考编号:https://emojipedia.org/bank/
您提供的两个似乎默认为"?",无效字符http://unicode.scarfboy.com/?s=U%2Bdfe6
编辑:处理消息的人可能会抛出你在消息中看到的编码,这可能是实际的问题。
如果您使用的是BigQuery Python客户端及其load_table_from_json
方法,则在以前的版本中存在Unicode错误(尤其是其字节超过0xFFFF等),并且我已经提交了这个错误修复程序,该修复程序已包含在最新版本中,https://github.com/googleapis/python-bigquery/releases/tag/v2.24.0.顺便说一句,您应该使用U0001F3E6
,而不是ud83cudfe6
(UTF-16十六进制类型)在BigQuery的Python代码中显示。
Unicode字符"BANK":https://www.fileformat.info/info/unicode/char/1f3e6/index.htm,https://charbase.com/1f3e6-unicode-bank