【问题标题】:function to convert unicode in bigquery在 bigquery 中转换 unicode 的函数
【发布时间】:2019-04-12 10:50:32
【问题描述】:

我在文档的 bigquery 中尝试使用 NFKC 的 NORMALIZE 函数,我发现我可以将字符串转换为可读格式。例如

WITH EquivalentNames AS (
  SELECT name
  FROM UNNEST([
      'Jane\u2004Doe',
      '\u0026 Hello'
      ]) AS name
)
SELECT
  NORMALIZE(name, NFKC) AS normalized_str
FROM EquivalentNames
GROUP BY 1;

& 字符显示正确,但我有一个表,其中有一列 STRING,其值中包含 unicode 字符,但我无法使用 NORMALIZE 将其转换为可读格式。

我还尝试了其他一些解决方案 Decode Unicode's to Local language in Bigquery 但还没有任何效果。

附上数据示例:

【问题讨论】:

  • 请澄清——你的意思是你的字符串看起来像'Jane\\u2004Doe',即转义出现在内容中吗?您提供的示例没有这种行为。
  • 附上数据图片

标签: google-bigquery unicode-normalization


【解决方案1】:

您发布了一个关于 NORMALIZE 的问题,但没有明确您的目标。

在这里,我将回答有关 NORMALIZE 的问题 - 指出它可能不会像您期望的那样做。但至少它的行为符合预期。

有很多方法可以用 Unicode 对相同的字符串进行编码。 Normalize 选择一个,同时保留字符串。

查看此查询:

SELECT *, a=b ab, a=c ac, a=d ad, b=c bc, b=d bd, c=d cd
FROM (
  SELECT NORMALIZE('hello ñá ?', NFC) a
   , NORMALIZE('hello ñá ?', NFKC) b
   , NORMALIZE('hello ñá ?', NFD) c
   , NORMALIZE('hello ñá ?', NFKD) d
)

如您所见 - 每次获得相同的字符串时,它们只是具有不同的不可见表示。

【讨论】:

  • 我正在尝试用他们的可读版本替换 unicode 字符
  • 请在问题中添加示例
  • ok 附上表格中部分数据的图片。目前使用REGEXP_REPLACE替换作为解决问题的一种方式。
  • 好的,我看到了它的外观图片 - 现在我想知道您希望它是什么样子
  • 好的,经过进一步调查,我认为这不是表中数据的方式,我在另一个函数中破坏了 uri 解码和 unicode。很抱歉...
【解决方案2】:

\u2004 被称为thick space,这就是为什么您认为它没有正确显示的原因,因为您只看到了空格 - 但是,如果您尝试一些其他代码 - 例如 \2020 - 您会看到它实际上正在显示,即使没有使用 NORMALIZE 函数进行额外处理

如下图

#standardSQL
WITH EquivalentNames AS (
  SELECT name
  FROM UNNEST([
      'Jane\u2020Doe',
      '\u0026 Hello'
      ]) AS name
)
SELECT
  name, NORMALIZE(name, NFKC) AS normalized_str
FROM EquivalentNames
GROUP BY 1

结果

Row name        normalized_str   
1   Jane†Doe    Jane†Doe     
2   & Hello     & Hello  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多