【问题标题】:How to make Apache Drill parse a JSON file with invalid UTF8 characters如何让 Apache Drill 解析带有无效 UTF8 字符的 JSON 文件
【发布时间】:2017-05-19 16:40:00
【问题描述】:

我正在尝试使用 Apache Drill 对 JSON 文件运行 SELECT 查询。我收到不同文件的各种错误。所有错误都是 JSON 解析错误:

  • 错误:DATA_READ 错误:解析 JSON 时出错 - 无效的 UTF-8 中间字节 0x3f

  • 错误:DATA_READ 错误:解析 JSON 时出错 - 非法不带引号的字符((CTRL-CHAR,代码 13)):必须使用反斜杠转义才能包含在字符串值中

  • 错误:DATA_READ 错误:解析 JSON 时出错 - 非法字符((CTRL-CHAR,代码 0)):只有常规空格(\r、\n、\t)

对于由于某些字符(例如 '趨勢ç§'技å')出现的第一个错误:我已经在下面尝试过:

  • 在包含无效 UTF-8 字符的字段上使用 Convert_ToConvert_From(不起作用。不要认为这些函数是为此目的而设计的。)
  • -Dsaffron.default.charset=UTF-16LE 添加到conf/drill-env.sh 中的DRILL_JAVA_OPTS(没有用,因为如果您的查询而不是您的数据包含无效的UTF-8 字符,则使用此选项)
  • 使用 Notepad++ 将文件编码更改为 UTF-8(没有用。本来希望这能用)
  • 尝试使用 Notepad++ 将文件编码更改为不带 BOM 的 UTF-8(Notepad++ 无法转换。保存后,再次打开时为 ANSI)

【问题讨论】:

    标签: json utf-8 character-encoding apache-drill


    【解决方案1】:

    使用以下任一方法将编码更改为“带有 BOM 的 UTF-8”:

    • 记事本++
    • iConv(shell 实用程序)

    并且,您将能够使用 Apache Drill 对其进行查询。

    我使用iConv将文件编码更改为'UTF-8',当使用Notepad++打开转换后的文件时,Notepad++显示的编码是'UTF-8 with BOM'。因此,我使用 Notepad++ 本身将原始文件的编码更改为“带有 BOM 的 UTF-8”,它也有效。

    这两个文件,一个使用 iConv 转换,一个使用 Notepad++ 转换(基本上,任何转换为​​“带有 BOM 的 UTF-8”的文件)都可以使用 Apache Drill 解析。

    转换:

    • 使用 Notepad++:从菜单栏中选择编码,将其更改为 'UTF8 with BOM' 并保存文件。如果此编码未显示在编码列表中,可能有一些插件(或其他方式)使其在 Notepad++ 中可用。
    • 使用 iConv:下载实用程序并使用以下命令运行它:iconv -f old-encoding -t new-encoding(在这种情况下为 UTF-8)file.txt > newfile.txt

    注意:对于大文件,您可能需要在转换之前将其拆分,因为在我的情况下 Notepad++ 无法打开 2GB 文件,而 iConv 也无法转换它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-27
      • 2019-06-21
      • 1970-01-01
      • 2016-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多