Nodejs编码问题

时间:2015-06-10 20:11:46

标签: javascript node.js string encoding character-encoding

我正在尝试从请求中获取数据,但格式或编码并不是我正在寻找的。

我尝试使用req.setEncoding('utf8')

设置编码

我应该得到的字符串是: import Graphics.Element exposing (..) import Graphics.Collage exposing (..) import Color exposing (..) main : Element main = collage 500 500 [filled orange (circle (1 + 49)]

我实际得到的是:import+Graphics.Element+exposing+%28..%29%0D%0Aimport+Graphics.Collage+exposing+%28..%29%0D%0Aimport+Color+exposing+%28..%29%0D%0Amain+%3A+Element%0D%0Amain+%3D+collage+500+500+%5Bfilled+orange+%28circle+%281+%2B+49%29%5D

这是我读取数据并设置编码的地方:

function onPost () {
// When there is a POST request
app.post('/elmsim.html',function (req, res) {
    console.log('POST request received from elmsim')
    req.setEncoding('ascii')
    req.on('data', function (data) {
        // Create new directory
        createDir(data, res)
    })
})

}

任何帮助都会很棒!感谢

2 个答案:

答案 0 :(得分:0)

您获得的字符串是网址编码字符串。

您是否尝试在字符串上调用decodeUriComponent?

decodeURIComponent( string )

答案 1 :(得分:0)

Luca的答案是正确的,但decodeURIComponent不适用于包含加号的字符串。您必须使用'%2B'拆分字符串。作为分割器(这表示加号)并将decodeURIComponent应用于每个单独的字符串。然后可以连接字符串,并可以添加加号。

这是我的解决方案:

function decodeWithPlus(str) {
    // Create array seperated by +
    var splittedstr = str.split('%2B')

    // Decode each array element and add to output string seperated by '+'
    var outs = ''
    var first = true
    splittedstr.forEach(function (element) {
        if (first) {
            outs += replaceAll('+', ' ', decodeURIComponent(element))
            first = false
        }
        else {
            outs += '+' + replaceAll('+', ' ', decodeURIComponent(element))
        }
    })
    return outs
}

function replaceAll(find, replace, str) {
    var outs = ''
    for (i = 0; i < str.length; i++) {
        if (str[i] === find) {
            outs += replace
        }
        else {
            outs += str[i]
        }
    }
    return outs
}