JSON 文件中的意外字符

unexpected characters in JSON file

问题:JSON Azure DataFactory v1 文件中的额外字符。

我有两个文件,它们是两个 Cosmos db 集合的直接副本。
我使用数据工厂 v1,选择默认值,将集合复制到 Blob 存储容器 然后使用 Azure 存储资源管理器将 JSON 文件复制到 Windows 10 桌面。

一个。使用编辑器查看文件 vi/Notrepad/Wordpad/Ultra Edit/Visual Studio Code 他们看起来不错。

乙。当我尝试将文件读入一个简单的 Nodejs(v9) 应用程序时 我收到 JSON 解析错误:

SyntaxError: C:\Users\ricko\Desktop\whippy\MorpheusDataProduction-01052018-
20.json: Unexpected token � in JSON at positi
on 0
at JSON.parse (<anonymous>)
at Object.Module._extensions..json (module.js:654:27)
at Module.load (module.js:554:32)
at tryModuleLoad (module.js:497:12)
at Function.Module._load (module.js:489:3)
at Module.require (module.js:579:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (C:\Users\ricko\Desktop\whippy\appUpdateJSON.js:5:17)
at Module._compile (module.js:635:30)
at Object.Module._extensions..js (module.js:646:10)

C。单行使用 JSON http://jsonlint.com 进行验证。多行不 验证给出一个解析错误:

    Error: Parse error on line 15:
    ..."_ts": 1512601730} { "path": "Dropbox\
    ----------------------^
    Expecting 'EOF', '}', ',', ']', got '{'

D.同样使用节点直接读取文件然后写入记录 在控制台上,我得到了一个奇怪的双倍行距版本。我也看到了两个� 一次尝试打开大括号前面的行开头的字符。 (示例如下)

   { " S T E P _ N A M E " : " O p e n s   T e s t " , " N A M E " : " A r t 
    h u r   J o b e r t " , " D A T E " : " 1 2
   1 9 / 2 0 1 6   3 : 5 7 : 4 7   P M " , " L O T " : " C G 1 5 " , " W A F 
   E R " : " " , " P R O C E S S _ S T E P " : "
   ...

我认为这是一个编码问题。开头的两个不可打印字符称为BOM,表示编码。聪明的编辑器可以处理这个问题。 UltraEdit 有一个十六进制模式,您可以在其中以十六进制形式逐字节查看 real 内容字节。 Notepad++ 非常强大,可以将编码转换为几乎所有你会使用的东西,有或没有 BOM。

C。我猜右括号和左括号之间少了一个逗号。

D.这里的编码似乎是 unicode(固定两个字节大小的字符)。用UltraEdit的十六进制模式验证一下。

我不了解 Azure,但如果您指定所需的编码,大多数编程语言都能够正确处理字节到字符的编码。当您必须将文本序列化为字节数组(用于通过类似套接字的线路发送)时,您始终必须意识到这个问题,反之亦然。

错误是由于 Unicode BOM(字节顺序标记)是文件开头的隐藏字符。

可以在这里找到答案: node.js windows 上的 utf8 编码文件读取文件错误