Javascript 解码Unicode';在Bigquery中将s转换为本地语言
我们在Bigquery中收到一个调查Web钩子数据。本地语言中的注释被捕获为unicode,我们在该注释中有特殊字符Javascript 解码Unicode';在Bigquery中将s转换为本地语言,javascript,google-bigquery,decode,Javascript,Google Bigquery,Decode,我们在Bigquery中收到一个调查Web钩子数据。本地语言中的注释被捕获为unicode,我们在该注释中有特殊字符 示例 调查中的评论——”别老是晚点,现场补行李费太贵" Bigquery数据中的注释-“\u522b\u8001\u662f\u665a\u70b9\uff0c\u73b0\u573a\u8865\u884c\u674e\u8d39\u592a\u8d35” 我们找到了解码个人评论的解决方案:- CREATE TEMPORARY FUNCTION utf8conv
- 示例
- 调查中的评论——”别老是晚点,现场补行李费太贵"李>
- Bigquery数据中的注释-“\u522b\u8001\u662f\u665a\u70b9\uff0c\u73b0\u573a\u8865\u884c\u674e\u8d39\u592a\u8d35”
CREATE TEMPORARY FUNCTION utf8convert(s STRING)
RETURNS STRING
LANGUAGE js AS """
return unescape( ( s ) );
""";
with sample AS (SELECT '\u522b\u8001\u662f\u665a' AS S)
SELECT utf8convert(s) from sample
当在注释字段中用数千条注释和不同的语言实现此代码时,它不起作用
CREATE TEMPORARY FUNCTION utf8convert(s STRING)
RETURNS STRING
LANGUAGE js AS """
return unescape( ( s ) );
""";
SELECT Comment, utf8convert(Comment) as Convert
FROM `airasia-nps.nps_production.NPSDashboard_Webhook_Data1`
where Comment is not null
运行时没有错误,但结果是Unicode不会更改为本地语言。
- 我尝试过这个代码
CREATE TEMP FUNCTION DecodeUnicode(s STRING) AS ( IF(s NOT LIKE '%\\u%', s, (SELECT CODE_POINTS_TO_STRING(ARRAY_AGG(CAST(CONCAT('0x', x) AS INT64))) FROM UNNEST(SPLIT(s, '\\u')) AS x WHERE x != '')) ); SELECT original, DecodeUnicode(original) AS decoded FROM ( SELECT trim(r'$-\u6599\u91d1\u304c\u9ad8\u3059\u304e\uff01\uff01\uff01') AS original UNION ALL SELECT trim(r'abcd') );
显示我认为是因为注释以特殊字符开头?看看这是否有效。它通过转换为Unicode代码点,然后转换为字符串,对包含\u的字符串执行“手动”解码。它应该比使用JavaScript更快
CREATE TEMP FUNCTION DecodeUnicode(s STRING) AS (
IF(s NOT LIKE '%\\u%', s,
(SELECT CODE_POINTS_TO_STRING(ARRAY_AGG(CAST(CONCAT('0x', x) AS INT64)))
FROM UNNEST(SPLIT(s, '\\u')) AS x
WHERE x != ''))
);
SELECT
original,
DecodeUnicode(original) AS decoded
FROM (
SELECT r'\u522b\u8001\u662f\u665a\u70b9\uff0c\u73b0\u573a\u8865\u884c\u674e\u8d39\u592a\u8d35' AS original UNION ALL
SELECT r'abcd'
);
作为输出,它返回
别老是晚点,现场补行李费太贵
和abcd
您能解释一下为什么您找到的解决方案不起作用吗?有没有办法复制?错误消息是什么?运行时没有错误,但结果是Unicode不会更改为本地语言。我在这里附上了代码和结果。奇怪的是,如果我们尝试解码对您不起作用的字符,就不会hey仍然正常工作。出于好奇,我想知道如果只选择一行编码不正确的行,并尝试对其进行解码以查看发生了什么(我尝试模拟断字符,但就我所能看到的而言,它只是抛出异常),会发生什么情况。可以,但当注释以特殊字符开头时显示错误?。查询失败错误:错误int64值:0x$-听起来您的输入不符合您在问题中描述的模式。我需要为这种情况添加正则表达式吗?在此,我添加了有问题的代码和错误。请使用正则表达式删除无效的数据。请发布一个单独的问题,而不是在评论中来回。