Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 解码Unicode';在Bigquery中将s转换为本地语言_Javascript_Google Bigquery_Decode - Fatal编程技术网

Javascript 解码Unicode';在Bigquery中将s转换为本地语言

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中收到一个调查Web钩子数据。本地语言中的注释被捕获为unicode,我们在该注释中有特殊字符

  • 示例

    • 调查中的评论——”别老是晚点,现场补行李费太贵"
    • 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$-听起来您的输入不符合您在问题中描述的模式。我需要为这种情况添加正则表达式吗?在此,我添加了有问题的代码和错误。请使用正则表达式删除无效的数据。请发布一个单独的问题,而不是在评论中来回。