2012-11-19 16 views
1

當我張貼以下到節點(簡化的示例):decodeURIComponent軋液機路徑

var xhr = new XMLHttpRequest(); 
xhr.open("POST", "http://localhost:3000/action"); 
xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); 
xhr.send(JSON.stringify({path:encodeURIComponent("E:\foo\bar.baz")})); 

的node.js代碼:

app.post('/action', function (request, response) { 
    var file = request.body['path']; 
    console.log(file); 
    console.log(decodeURIComponent(file)); 
}); 

我得到以下輸出:

E%3A%0Coo%08ar.baz 
E:♀oar.baz 

我如何正確解碼?

+0

有趣的是,如果路徑更改爲:'E: \\ foo \\ bar.baz',然後'decodeURIComponent'正常工作。 – Anders

+0

另外有意思的是,decodeURIComponent(「E%3A%0Coo%08ar.baz」)按照預期在node.js REPL上工作。 –

+0

這是一個公平點,我現在可以看到,這不是一個node.js問題。版主是否可以編輯標題並刪除「node.js」? – Anders

回答

3

你在你的路徑編碼special characters爲反斜槓被保留用於轉義:

\f Form feed

\b Backspace

在編碼時這些成爲:

%0C

%08

MDN

要包含在字符串中反斜槓,你必須躲避 反斜槓字符

"E:\\foo\\bar.baz"

+0

這很有道理,修正方法是用雙反斜槓替換反斜槓,即'E:\\ foo \\ bar.baz'? – Anders

+0

或者使用正斜槓'/'。 Windows可以處理,如果這是你的目標。我不相信編碼是必要的。 –