我在使用NodeJS "shred“在POST请求中提交UTF8编码的文本文件时遇到了问题
我试图发布的文本内容在客户端看起来很好,因为我在调用client.post之前将其console.log到屏幕上,服务器得到的是文本文件的内容,但最后两个字符总是丢失/截断。这对于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的内容。我不明白原因何在。这对下游有很大的影响,所以任何零散的解决办法都不太可能有帮助。
我还注意到,当textToPost的内容记录到控制台时,会出现一个"?“在内容之前。如果文件是ANSI编码的文件,则不会显示此选项。
请帮帮我..谢谢
发布于 2012-08-30 08:11:02
好了,在上面的评论之后(感谢rdrey和JohnnyHK),我决定试着从文件中去掉BOM。所以我使用十六进制编辑器,删除EF BB BF字符并保存,这次文件完全完好无损地到达服务器,最后没有丢失任何字符。现在,我将修改我的nodeJS,将字符也去掉。这并没有完全回答我的问题(为什么BOM会有问题)。也许shred在发布带有BOM的文本文件时有问题。也许它错误地读取了它,并确定文件比实际小,因此,砍掉了结尾。我不确定。
https://stackoverflow.com/questions/12179434
复制