2012-08-29 30 views
0

我有使用一個的NodeJS POST請求提交UTF8編碼的文本文件中的問題「分解」爲什麼我的NodeJS的最後2個字符將POST請求分解了?

我想發佈文字內容看起來在客戶端很好,我知道,因爲我是要CONSOLE.LOG在調用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編碼文件時,不會出現這種情況。

請幫助..謝謝

+0

具有「?」作爲第一個字符的textToPost的內容是一個不好的符號,並且可能意味着shred沒有任何問題,而是使用您的輸入文件。 – rdrey

+0

這個確定的氣味就像你的UTF8有一個字節順序標記,這個尺寸已經搞亂了。 http://stackoverflow.com/questions/2223882/whats-different-between-utf-8-and-utf-8-without-bom – JohnnyHK

+0

感謝您的評論,非常感謝。這是爲我輸入的大量UTF8文本文件發生的(不只是一個),是的,這些文件都有一個BOM,當我在二進制編輯器中將它們打開爲EF BB BF(即UTF8)時,我可以看到這些文件。不確定發佈時如何導致問題 – Tommy

回答

0

好吧,以後上述評論(感謝rdrey和JohnnyHK),我決定嘗試從文件(S)剝離出來的BOM。所以我用了一個十六進制編輯器,刪除了EF BB BF字符並保存了下來,這次文件到達服務器完全完好無損,最後沒有字符丟失。現在,我將修改我的nodeJS以脫離字符。這並不能完全回答我的問題(爲什麼BOM有問題)。也許碎片在發佈帶有BOM的文本文件時存在問題。也許它不正確地讀取它,並決定文件比它實際小,因此,結束關閉。我不確定。

相關問題