表情符号在上传到 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 时崩溃的主要内容,如果未能解决你的问题,请参考以下文章