表情符号在上传到 Bigquery 时崩溃

Posted

技术标签:

【中文标题】表情符号在上传到 Bigquery 时崩溃【英文标题】:Emoji crashed when uploading to Big Query 【发布时间】:2018-09-04 15:15:24 【问题描述】:

目前,我在将 EMOJI 数据上传(使用 python)到 BIG QUERY 时遇到问题

这是我尝试上传到 BQ 的示例代码:

 "emojiCharts":"emoji_icon":"\ud83d\udc4d","repost": 4, "doc": 4, "engagement": 0, "reach": 0, "impression": 0 
 "emojiCharts":"emoji_icon":"\ud83d\udc49","repost": 4, "doc": 4, "engagement": 43, "reach": 722, "impression": 4816 
 "emojiCharts":"emoji_icon":"\u203c","repost": 4, "doc": 4, "engagement": 0, "reach": 0, "impression": 0 
 "emojiCharts":"emoji_icon":"\ud83c\udf89","repost": 5, "doc": 5, "engagement": 43, "reach": 829, "impression": 5529 
 "emojiCharts":"emoji_icon":"\ud83d\ude34","repost": 5, "doc": 5, "engagement": 222, "reach": 420, "impression": 2805 
 "emojiCharts":"emoji_icon":"\ud83d\ude31","repost": 3, "doc": 3, "engagement": 386, "reach": 2868, "impression": 19122 
 "emojiCharts":"emoji_icon":"\ud83d\udc4d\ud83c\udffb","repost": 5, "doc": 5, "engagement": 43, "reach": 1064, "impression": 7098 
 "emojiCharts":"emoji_icon":"\ud83d\ude3b","repost": 3, "doc": 3, "engagement": 93, "reach": 192, "impression": 1283 
 "emojiCharts":"emoji_icon":"\ud83d\ude2d","repost": 6, "doc": 6, "engagement": 212, "reach": 909, "impression": 6143 
 "emojiCharts":"emoji_icon":"\ud83e\udd84","repost": 8, "doc": 8, "engagement": 313, "reach": 402, "impression": 2681 
 "emojiCharts":"emoji_icon":"\ud83d\ude18","repost": 7, "doc": 7, "engagement": 0, "reach": 8454, "impression": 56366 
 "emojiCharts":"emoji_icon":"\ud83d\ude05","repost": 5, "doc": 5, "engagement": 74, "reach": 1582, "impression": 10550 
 "emojiCharts":"emoji_icon":"\ud83d\ude04","repost": 5, "doc": 5, "engagement": 73, "reach": 3329, "impression": 22206

问题是大查询看不到任何这个表情符号 (\ud83d\ude04) 并且只会以这种格式显示 (\u203c)

即使字段是STRING,它显示2个黑色的rombs,为什么BQ不能将表情符号显示为字符串而不将其转换为实际的表情符号?

问题:

是否有任何方法可以将 EMOJI 上传到 Big Query 以使其正确加载? - “将在 Google 数据洞察中使用

我应该手动(硬编码)将所有表情符号代码更改为可接受的,这是可接受的格式吗?

【问题讨论】:

问题在于 BigQuery UI 如何显示数据,而不是 BigQuery 如何存储数据,对吗?您可以使用TO_CODE_POINTS 函数检查字符串。 查看charbase.com/1f618-unicode-face-throwing-a-kiss 您想要的是将javascript 转义字符转换为实际的unicode 数据。查看***.com/questions/38147259/… 【参考方案1】:

正如用户在评论中提到的“数字”:

查看charbase.com/1f618-unicode-face-throwing-a-kiss 你想要的是将 javascript 转义字符转换为实际的 unicode 数据。

,您需要更改表情符号的编码才能准确地表示为一个字符:

SELECT "\U0001f604 \U0001f4b8"
--   , "\ud83d\udcb8"
--   , "\ud83d\ude04"

第 2 行和第 3d 行失败,出现类似 Illegal escape sequence: Unicode value \ud83d is invalid at [2:7] 的错误,但第一行在 BigQuery 和 Data Studio 中正确显示:

对此的其他想法:

https://***.com/search?q=%5Cud83d

【讨论】:

如果此表情符号是文本文件的一部分(修改后的 JSON),那么更改表情符号编码的最佳方法是什么? 这是一个有趣的问题,我没有答案 - 请查看相关的现有问题,或发布一个新问题(可能与文件编码有关,而不是特定于 BigQuery)跨度> 我看了一下,正在检查谷歌,这里......在很多地方,但使用 Big Querry 的人并不多,没有任何有用的答案......我只是担心发布另一个问题,因为将被禁止提问,你确定没问题,如果我参考这个问题,新问题不会重复? 我认为您的问题与 BigQuery 无关,而是如何生成具有实际表情符号 unicode 的 JSON,而不是显示转义序列的字符串。您需要展示您是如何创建这些文件和实际文件的(上传到某处?) 如果有机会,你能告诉我你吗,通过使用这个表情符号代码\U0001f604 让它们显示,因为我的一个只显示没有正斜杠的文本???【参考方案2】:

Python 不支持由多个 UTF-16 字符组成的“代理字符”表示,并且某些表情符号(超过 0xFFFF)使用它们。例如,? 在 Python 中可以用\U0001f3e6 (UTF-32) 表示,有些语言使用\ud83c\udfe6。对于那些值小于0xFFFF,python 和其他语言都使用相同的表示,例如\u3020 (〠)。要解决编码问题,您可以手动转换表情符号字符或考虑使用一些库,例如https://github.com/hartwork/surrogates 将它们转换为 UTF-32。

另外,BigQueqry Python 客户端的load_table_from_json 有一个关于那些值超过0xFFFF 的字符的错误,即使您使用正确的 UTF-32 表示。几天前它刚刚发布了一个新版本来修复它。参考:https://github.com/googleapis/python-bigquery/releases/tag/v2.24.0

关于银行表情符号?列出不同表示的一些参考:

https://www.fileformat.info/info/unicode/char/1f3e6/index.htm https://charbase.com/1f3e6-unicode-bank

【讨论】:

以上是关于表情符号在上传到 Bigquery 时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

UITextField - 防止用户输入非标准字符(如表情符号)

如何将自定义表情符号上传到我的不和谐机器人

NSJSON序列化和表情符号

java如何实现微信表情及特殊字符存入数据库

如何将表情符号嵌入到 Tweepy 状态文本中?

带有自定义表情符号的反应角色