为什么我的NodeJS的最后两个字符会破坏POST请求被剥离?

时间:2012-08-29 13:45:41

标签: node.js post utf-8 document-body shred

我在使用NodeJS“shred”在POST请求中提交UTF8编码的文本文件时遇到问题

我试图发布的文本内容在客户端看起来很好,我知道因为我在调用client.post之前将它登录到屏幕上,服务器得到的是文本文件的内容但是最后一个2个字符总是丢失/切碎。这不是ANSI文本文件的问题。如果我将文本文件从UTF8转换为ANSI,它在到达服务器时就完成了。

var Shred = require('shred');
var client = new Shred();
var textToPost = fs.readFileSync("myfile.txt", 'utf8');
console.log (textToPost);
client.post({
     url: "http://www.example.com/readTextFile.php",
     headers: { 'Content-Type': 'application/x-subrip'},
content: textToPost,
on: {
  200: function (response) {
    console.log("posted ok");
console.log(response.content.body);
  },
  500: function (response) {
    asyncCb(new Error('bad response\n' + response.content.body));
  }
}

服务器上收到的内容(通过readTextFile.php)是myfile.txt的内容,最后删除了2个字符。我不明白为什么。这具有很大的下游影响,因此任何不完整的解决方案都不太可能有所帮助。

我还注意到当textToPost的内容被记录到控制台时,有一个“?”在内容之前。当文件是ANSI编码文件时,不会出现此问题。

请帮忙..谢谢

1 个答案:

答案 0 :(得分:0)

好的,在上面的评论之后(感谢rdrey和JohnnyHK),我决定尝试从文件中删除BOM。所以我使用了一个十六进制编辑器,删除了EF BB BF字符并保存,这次文件完全到达服务器,最后没有字符丢失。现在我将修改我的nodeJS以消除字符。这并没有完全回答我的问题(为什么BOM存在问题)。也许shred在发布带有BOM的文本文件时遇到问题。也许它错误地读取它并决定文件比实际小,因此,切断结束。我不确定。