Javascript 为什么Node.js V6无法解析url的法语单词?
我遇到了一个问题,这个带有法语单词的url不能在节点V6.10.0中解析,但是可以在节点V0.10.42下正确解析 下面是我的代码的更多细节Javascript 为什么Node.js V6无法解析url的法语单词?,javascript,node.js,express,urlencode,Javascript,Node.js,Express,Urlencode,我遇到了一个问题,这个带有法语单词的url不能在节点V6.10.0中解析,但是可以在节点V0.10.42下正确解析 下面是我的代码的更多细节 Express的中间件 app.use bodyParser.urlencoded({ extended: false }) app.use bodyParser.json({ limit: '20mb' }) app.use bodyParser.urlencoded({ limit: '20mb', extended: false }) 并在上述
Express的中间件
app.use bodyParser.urlencoded({ extended: false }) app.use bodyParser.json({ limit: '20mb' }) app.use bodyParser.urlencoded({ limit: '20mb', extended: false })
- 并在上述url路由器中输出
字符
router = express.Router() router.get '/share/:lang', (req, res, next) -> console.log(req.query.chars)
curl'localhost:4020/share/Fr?chars=ECYCÉDN'
测试此服务器,结果如下所示
- 节点v0.10.42
{“chars”:“ECYCÉDN”}
- 节点v6.10.0
{“chars”:“ECYCÃDN”}
4.15.2
我想知道为什么在NodeV6.10.0下无法正确解析这个法语单词
我认为这可能是字符编码的问题。但是,我尝试使用的是querystring.unescape
或querystring.escape
of,但效果不佳
更新
当我试图在路由器
'/share/:lang'
中输出console.log(JSON.stringify(req.query))
时,结果是{“chars”:“ECYCÃDN”}
,字符的长度是8
这应该不需要超过10行的代码才能显示为一个整体。请更新您的问题,使其不再只是几行代码,而是一段可运行的代码,并用一小段显示依赖关系-Node 0.10是Node的过时版本,其中的代码是否工作基本上没有意义:Node 6和Express存在问题。大概是Express 4,但在您显示完整代码并列出所使用的依赖项及其版本之前,我们无法知道。require('querystring')。parse('chars=ECYCÉDN')
在节点v7.7.1和v6.10.3中对我很好。我同意@Mike'Pomax'Kamermans的观点,如果没有一个独立的测试用例,这个问题有点难以回答。我认为bodyparser
与解析querystring
没有任何关系。您确定问题出在节点内部,而不是,例如用于查看控制台的shell
输出吗?请尝试记录req.query.chars.length
。@zangw:您能测试我评论中的代码以确定问题是与node还是与express有关吗?您是否可以尝试使用web浏览器而不是curl来发送请求?我认为在查询中使用原始字节是无效的,因为Chrome percent在将unicode字符串发送到服务器之前对其进行UTF-8编码。