0

NodeJS「シュレッド」を使用してPOSTリクエストでUTF8エンコードされたテキストファイルを送信する際に問題が発生しました

私が投稿しようとしているテキストコンテンツは、クライアント側では問題なく表示されます。client.postを呼び出す直前にconsole.logを画面に表示するため、サーバーが取得するのはテキストファイルのコンテンツですが、最後の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によって)受信されるのは、最後の2文字が削除されたmyfile.txtの内容です。理由がわかりません。これはダウンストリームに大きな影響を与えるため、パッチのある回避策は役に立たない可能性があります。

また、textToPostのコンテンツがコンソールに記録されると、「?」が表示されることに気付きました。内容の前。これは、ファイルがANSIエンコードファイルの場合は表示されません。

助けてください..ありがとう

4

1 に答える 1

0

上記のコメントの後 (rdrey と JohnnyHK に感謝)、ファイルから BOM を取り除いてみることにしました。そこで、16 進エディタを使用し、EF BB BF 文字を削除して保存しました。今回は、ファイルが完全に無傷でサーバーに到着し、最後に文字が欠落していませんでした。ここで、nodeJS を変更して、文字も削除します。これは私の質問に対する完全な回答ではありません (BOM に問題があるのはなぜですか)。おそらく、shred は BOM 付きのテキスト ファイルを送信する際に問題が発生します。おそらく、それを誤って読み取り、ファイルが実際よりも小さいと判断し、その結果、最後を切り落とします。私はわかりません。

于 2012-08-30T08:11:01.917 に答える