【问题标题】:Null sent in front of fs.readFile string在 fs.readFile 字符串前面发送 Null
【发布时间】:2017-10-06 22:03:45
【问题描述】:

背景

已有一个带有 postgres db 的 Django 应用程序。无法更改(出于某种原因),用户希望自动将报告上传到它,而不是他们必须单击以上传单个报告的按钮(可以理解)

我只是在编写一个小 Node.js 脚本(它将附加到另一个节点应用程序)来读取 .csv 文件到 json string 并通过邮寄将其发送到数据库。只是为了在我进行自动化之前测试它发送。

问题

问题是当我发送数据时,数据开头似乎隐藏了?

?Number,Name,Date,Foo,Bar

这会导致读取它的表出现问题。

我正在使用的代码

const request = require('request')
const fs = require('fs')
fs.readFile('users.csv', utf8, function(err, data) {
    var sentData = JSON.stringify(data)
    request.post('/api/user/set_data').form(sentData)
})

我猜它与" 有关,因为稍后在数据中它也转换( ) tp %28%29 但在\r\n" 之后的末尾没有隐藏字符

更新

所以如果我有一点 Fiddle fs.readFile('users.csv', (err, data) => console.log(err, String(data)))

我可以看到null 'Number,Name,Date,Foo,Bar CSV 中没有空值或空值

【问题讨论】:

  • 我不认为这是一个问号,而是一个byte order mark。您确定文件是 UTF-8 编码的吗?
  • 好吧...我假设是这样。如果我输入除 'utf8' 以外的任何内容,我将得不到任何可用的数据
  • 您是否尝试使用编辑器打开 CSV 文件,让您可以查看所有字符,例如 Notepad++ 或其他?
  • 是的,在 Visual Studio 代码中打开它,看起来就像一个完全正常的 csv 文件

标签: json node.js post


【解决方案1】:

所以这是一个 BOM 导致的问题

您可以在第一个标题前面看到 null。 我做了npm i strip-bom

现在有

const request = require('request')
const fs = require('fs')
const stripBom = require('strip-bom')

fs.readFile('users.csv', utf8, (err, data) => {
    var strippedData = stripBom(data)
    var sentData = JSON.stringify(strippedData)
    request.post(`${location}/set_data`).form(sentData)
}) 

一切都很好

【讨论】:

    猜你喜欢
    • 2012-08-10
    • 2018-03-06
    • 2014-04-09
    • 2020-11-29
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多