javascript - 修复 Node Js 中的 Facebook JSON 编码

标签 javascript node.js encoding character-encoding iconv

我正在尝试解码您下载数据时从 Facebook 获得的 JSON。我正在使用 Node.js。数据中有很多奇怪的 unicode 转义,这些转义并没有真正的意义。示例:

"messages": [
    {
      "sender_name": "Emily Chadwick",
      "timestamp_ms": 1480314292125,
      "content": "So sorry that was in my pocket \u00f0\u009f\u0098\u0082\u00f0\u009f\u0098\u0082\u00f0\u009f\u0098\u0082",
      "type": "Generic"
    }
]

应该解码为很抱歉它在我的口袋里😂😂😂。使用fs.readFileSync(filename, "utf8")让我很抱歉,它在我的口袋里ððð,而不是mojibake。

This question提到它搞砸了 latin1 编码,您可以编码为 latin1,然后解码为 utf8。我尝试这样做:

import iconv from 'iconv-lite';
function readFileSync_fixed(filename) {
    var content = fs.readFileSync(filename, "binary");
    return iconv.decode(iconv.encode(content, "latin1"), "utf-8")
}
console.log(JSON.parse(readFileSync_fixed(filename)))

但我仍然得到 mojibake 版本。有人能指出我正确的方向吗?我不熟悉 iconv 在这方面的工作原理。

最佳答案

以某种方式解决了...。如果有更好的方法,请告诉我。

所以,这是修改后的函数

readFacebookJson(filename) {
    var content = fs.readFileSync(filename, "utf8");
    const json = JSON.parse(converted)
    return json
}

fixEncoding(string) {
    return iconv.decode(iconv.encode(string, "latin1"), "utf8")
}

这不是 readFileSync() 搞砸了,而是 JSON.parse()。因此,我们像往常一样将文件读取为 utf8,但是,我们需要对现在是 JSON 文件属性的字符串进行 latin1 编码/解码,而不是在解析之前对整个 JSON 文件进行编码/解码。我用 map() 做到了这一点。

messages = readFacebookJson(filename).messages.map(message => {
    const toReturn = message;
    toReturn.sender_name = fixEncoding(toReturn.sender_name)
    if (typeof message.content !== "undefined") {
        toReturn.content = fixEncoding(message.content)
    }
    return toReturn;
}),

这里的问题当然是某些属性可能会丢失。因此,请确保您知道哪些属性包含哪些内容。

关于javascript - 修复 Node Js 中的 Facebook JSON 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57059821/

相关文章:

javascript - 通过 Google API 查找组织的公共(public)社交媒体资料

node.js - Twitter API POST 媒体/上传(分块)错误 "Not found"

angularjs - cmd 提示卡住,直到我按下 CTRL+C,然后继续正常

javascript - Sequelize – 查询重叠日期但有异常

javascript - Swiper js,将当前时间重置为0幻灯片的视频

javascript - 尝试国际化 Angular 中 adf-widget 的标题和描述(Blur Admin)

c++ - 使用 NvPipe 编码桌面复制 API ID3D11Texture2D 框架

c# - Web浏览器文档文本编码

简单字符串压缩算法

javascript - 将 clientID 传递给 javascript 并提取值,澄清