今天在做一个获取天气的小功能时,使用的百度的天气API,正常情况下,浏览器直接访问的链接里即使有中文也是可以正常获取到数据的,

但是使用request去请求时,打印了下内容直接给我返回undefined

原因是url规范里是使用unicode编码

在js中提供了几个函数来处理这种情况,而无需在自己写方法

Javascript函数:encodeURIComponent()

它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。

因此,“; / ? : @ & = + $ , #”,这些在encodeURI()中不被编码的符号,在encodeURIComponent()中统统会被编码。至于具体的编码方法,两者是一样。

它对应的解码函数是decodeURIComponent()。

Javascript函数:encodeURI()

encodeURI()是Javascript中真正用来对URL编码的函数。

它着眼于对整个URL进行编码,因此除了常见的符号以外,对其他一些在网址中有特殊含义的符号“; / ? : @ & = + $ , #”,也不进行编码。编码后,它输出符号的utf-8形式,并且在每个字节前加上%。

它对应的解码函数是decodeURI()。

需要注意的是,它不对单引号'编码。

Javascript函数:escape()

现在这个函数已经不提倡使用了,实际上,escape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值

代码示例:

之前代码:

let localtion = '广州'
let url = `https://www.baidu.com/s?wd=${location}`
request(url, function(err, response, body) {
    if (!err && response.statusCode == 200) {
        console.log(body)//返回undefined
    }
}

修改后

let localtion = '广州'
localtion = encodeURIComponent(localtion);
let url = `https://www.baidu.com/s?wd=${location}`
request(url, function(err, response, body) {
    if (!err && response.statusCode == 200) {
        console.log(body)//正确返回
    }
}
最后修改:2021 年 10 月 09 日
如果觉得我的文章对你有用,请随意赞赏