2011-08-02 116 views
3

我無法理解node.js中的字符編碼。我正在傳輸數據,出於某種原因,編碼會導致某些字符被其他字符替換。我正在做的是在客戶端進行base64編碼並在node.js中對其進行解碼。Node.js緩衝區編碼問題

爲了簡化,我將範圍縮小到這段代碼失敗:

new Buffer("1w==", 'base64').toString('utf8'); 

1w==×字符的基64編碼。現在,當將這個字符串與'base64'參數傳遞給一個緩衝區,然後做.toString('utf8')我希望得到相同的字符,但我沒有。相反,我得到了(字符代碼65533)。

編碼utf8錯?如果是這樣,我應該用什麼來代替?如果不是,我如何解碼node.js中的base 64字符串?

回答

4

不,你的假設是錯誤的。 base64編碼的字符串顯然只有一個字節編碼。並且U + 007F上方的所有Unicode碼位都需要至少兩個字節才能以UTF-8編碼。

我仍然不擅長解碼base64,而是嘗試使用ISO-8859-1。

重點是,base64解碼將字符串轉換爲字節字符串。你認爲它解碼爲一個字符串,但這是錯誤的。您仍然需要將字節字符串編碼爲字符串,在您的情況下,正確的編碼是ISO-8859-1。

+0

我將編碼從'utf8'改爲'binary',它只使用單個字節。文檔說這是一個棄用的功能,但現在它的工作。謝謝。 – pimvdb

0
echo -n x | base64 

eA== 

給定的代碼會得到所需要的答案,如果編碼是正確的。這個問題可能在編碼方面。 (1w ==翻譯爲字節0xD7,這將是多字節UTF-8字符的開始)

+0

當解釋爲ISO 8859-1時,與問題中一樣,字節序列'\ 0xD7'變成字符序列'U + 00D7',它是'×'。不要被'x'弄糊塗,只是因爲它看起來很相似。以下是區別:'×x×x×x×x'。 –