javascript - 将 JSON 中的特殊字符转换为 CSV 时的字符编码(excel)

标签 javascript node.js csv utf-8 character-encoding

我目前正在尝试使用

从 json 填充 .csv 文件
const createCsvWriter = require('csv-writer').createObjectCsvWriter;

我已经读过他们使用的默认编码是 utf-8,我的一些 JSON 中有特殊字符、表情符号或中文字母......这是一个示例

[ { username: 'jung.y00n',
    name: '정 윤',
    bio:
     'ғʀᴇᴇʟᴀɴᴄᴇʀᴍᴏᴅᴇʟ\nᴄᴏɴᴛᴀᴄᴛ 📩 ᴅᴍ 사적/공구 연락 확인 못해요\n⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\n🔜바이오리 슬림/브이 스틱 (10/14-16)',
    pic_url: 'C:/Users/Administrator/Downloadsjung.y00n.jpg' } ]

[ { username: 'yujing.lai',
    name: '勇闖美利堅的美少女 * Miss.Amber',
    bio:
     '📍San Francisco,California USA\n🎓Academy of Art University🇺🇸Master of Fine Arts\n🎓National Taiwan University of Art🇹🇼BFA\n✈️🇹🇼🇮🇹🇪🇺🇺🇸🇳🇴🇦🇹🇭🇷🇸🇮🇻🇦🇻🇳🇰🇷🇭🇰🇯🇵🇨🇳🇲🇴',
    pic_url: 'C:/Users/Administrator/Downloadsyujing.lai.jpg' } ]

[ { username: 'rky_thitiworada',
    name: 'ฐิติวรดา จังจริง',
    bio:
     'Thitiworada Janjring\n🎧DJ.Rky🎧\nI\'m interested in music,mixing,EDM,DJ   \n ติดต่องาน ☎️ 097-0922200 \nติดต่องาน ID line➡️  djrky  \n🖤#msrk 💞👫 @mashiimx',
    pic_url: 'C:/Users/Administrator/Downloadsrky_thitiworada.jpg' } ]

[ { username: 'mimisayhihi',
    name: '米恩綺Mimi',
    bio:
     '📍Taipei \n📩工作聯繫窗口\nKaren :karen@cclfilm.com \n方慈/judy@ cclfilm.com \n活動邀約/hihifish1128@gmail.com',
    pic_url: 'C:/Users/Administrator/Downloadsmimisayhihi.jpg' } ]

但是将 JSON 导出为 csv 并在 Windows 中的 ms excel 中打开它后,它看起来像这样

enter image description here

知道我需要做什么才能正确编码和显示吗?

最佳答案

您可以在前面加上 Byte order mark到文件告诉 Excel 正确解码字符,这应该可以解决问题:

const users = [ { username: 'jung.y00n',
    name: '정 윤',
    bio:
    'ғʀᴇᴇʟᴀɴᴄᴇʀᴍᴏᴅᴇʟ\nᴄᴏɴᴛᴀᴄᴛ 📩 ᴅᴍ 사적/공구 연락 확인 못해요\n⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\n🔜바이오리 슬림/브이 스틱 (10/14-16)',
    pic_url: 'C:/Users/Administrator/Downloadsjung.y00n.jpg' } 
,
{ username: 'yujing.lai',
    name: '勇闖美利堅的美少女 * Miss.Amber',
    bio:
    '📍San Francisco,California USA\n🎓Academy of Art University🇺🇸Master of Fine Arts\n🎓National Taiwan University of Art🇹🇼BFA\n✈️🇹🇼🇮🇹🇪🇺🇺🇸🇳🇴🇦🇹🇭🇷🇸🇮🇻🇦🇻🇳🇰🇷🇭🇰🇯🇵🇨🇳🇲🇴',
    pic_url: 'C:/Users/Administrator/Downloadsyujing.lai.jpg' } 
,
{ username: 'rky_thitiworada',
    name: 'ฐิติวรดา จังจริง',
    bio: 'Thitiworada Janjring\n🎧DJ.Rky🎧\nI\'m interested in music,mixing,EDM,DJ   \n ติดต่องาน ☎️ 097-0922200 \nติดต่องาน ID line➡️  djrky  \n🖤#msrk 💞👫 @mashiimx',
    pic_url: 'C:/Users/Administrator/Downloadsrky_thitiworada.jpg' } 
,
{ username: 'mimisayhihi',
    name: '米恩綺Mimi',
    bio:
    '📍Taipei \n📩工作聯繫窗口\nKaren :karen@cclfilm.com \n方慈/judy@ cclfilm.com \n活動邀約/hihifish1128@gmail.com',
    pic_url: 'C:/Users/Administrator/Downloadsmimisayhihi.jpg' } 
];

const fs = require("fs");
const createCsvWriter = require('csv-writer').createObjectCsvWriter;

const outputFile = "users.csv";
const csvWriter = createCsvWriter({
    path: outputFile,
    header: Object.keys(users[0]).map(key => { return {id: key, title: key} })
});

function prependBOM(file) {
    let fileContents = fs.readFileSync(file);
    fs.writeFileSync(file, "\ufeff" + fileContents);
}

async function writeCSV() {
    await csvWriter.writeRecords(users);
    // Prepend BOM to file so Excel will display characters correctly.
    prependBOM(outputFile);    
}

writeCSV();

如果您不想执行此操作,可以将 UTF-8 数据手动导入 Excel:

  • 启动 Excel。
  • 使用“数据”->“导入外部数据”->“导入数据”导入 csv 数据
  • 选择文件类型“csv”,浏览到您的文件并选择它。
  • 在导入向导中将 File_Origin 更改为“65001 (UTF-8)”。
  • 然后您可以点击“转换数据”来查看您的数据。
  • 您可以选择关闭并加载,以使用导入的数据创建新工作表。

关于javascript - 将 JSON 中的特殊字符转换为 CSV 时的字符编码(excel),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58300212/

相关文章:

javascript - 使用 Node.js 进行垃圾收集

node.js - 根据用户输入动态地将国家/地区代码传递给@IsPhoneNumber()

python - 根据另一个 csv 文件过滤 csv 文件中的行并将过滤后的数据保存在新文件中

python - Tensorflow CSV 解码错误

python - 需要将抓取的数据写入csv文件(线程)

javascript - 如何通知另一个组件该方法执行

javascript - 我们可以在reactjs hooks中使用useState()的对象解构吗?

javascript - 如何匹配 HTML 标签中未包含的所有引号?

javascript - 带有强制引号的 HTML 文本输入?

node.js - 在文件更改时重新启动 Heroku 本地?