javascript - 修复 Node Js 中的 Facebook JSON 编码
问题描述
我正在尝试解码您在下载数据时从 Facebook 获得的 JSON。我正在使用节点 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"
}
]
哪个应该解码为So sorry that was in my pocket
. 使用fs.readFileSync(filename, "utf8")
得到了我So sorry that was in my pocket ððð
,这是 mojibake。
这个问题提到它搞砸了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 在这方面的工作方式。
解决方案
为此有非常简单的解决方案
拳头安装utf8
包
npm i utf8
.
您的代码将如下所示
const fs = require('fs');
const utf8 = require('utf8');
let rawdata = fs.readFileSync('JSON_FILE_NAME');
let data = JSON.parse(rawdata);
for (let i = 0;i < data["messages"].length;i++) {
if (data["messages"][i]["content"] != undefined) {
console.log(utf8.decode(data["messages"][i]["content"]))
}
}
推荐阅读
- javascript - 回调函数本身未定义
- python - 在 pandas 中使用 group by 时如何找到索引的最小值和最大值?
- javascript - 使用 CSS 隐藏特定的 Dev 元素
- android - 成功 Oauth 2.0 登录 Android 后需要电子邮件地址
- google-colaboratory - 如何跳过解压缩已存在于 google colab 中的文件
- jquery - 为什么为笛卡尔积抛出错误的jquery字符串?
- python - 使用 LineString Python Shapely 将圆分成两部分
- javascript - 反应原生 Firestore:使用无效数据调用的函数 addDoc()
- pandas - 用索引名称标记 pandas 标头
- oracle - Oracle:如何将 char(16) 转换为日期