在bigquery中转换unicode的函数

function to convert unicode in bigquery

我在文档中的 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;

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

我也尝试了一些其他的解决方案 但还没有任何效果。

附件为数据示例:

您发布了一个关于 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
)

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

\u2004 被称为 thick space,这就是为什么您认为它没有正确显示的原因,因为您只看到 space - 但是,如果您将尝试一些其他代码 - 例如 20 - 您会看到它实际上正在显示,即使没有使用 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