使用nodejs服务器加载具有Unicode名称的文件

时间:2014-06-03 00:50:32

标签: node.js unicode filenames

我想使用NodeJS服务器加载名称为здраво.mp3的音频文件。 (如果你想知道的话,那就是塞尔维亚语中的“zdravo”或“hello”)。

但是,NodeJS会发出%D0%B7%D0%B4%D1%80%D0%B0%D0%B2%D0%BE.mp3请求,导致找不到该文件。

如果我将文件从桌面拖到浏览器窗口中,浏览器很乐意将其作为文件/// path /здраво.mp3加载,因此问题不在于浏览器处理Unicode字符串的方式< / p>

包含该文件链接的HTML页面在头部中有这个元标记...

<meta charset="utf-8" />

...非常高兴在页面上显示“Здраво”文本,因此Unicode字符串在浏览器中正确形成。

我猜测浏览器在发送请求之前将名称转换为ISO-8859-1,并且NodeJS服务器在文件系统中查找之前需要将其转换回Unicode。

我的问题是:我是否已经有一个模块可用于进行此转换,是否有如何使用它的示例?

解决方案:根据Edwin Dalorzo的回复,这是我对handleRequest()函数的单行修复:

function handleRequest(request, response) {

  request.url = decodeURIComponent(request.url) // the fix
  var pathname = url.parse(request.url).pathname

1 个答案:

答案 0 :(得分:1)

目前尚不清楚如何接收编码的字符串,但肯定只需执行以下操作即可解码:

decodeURIComponent("%D0%B7%D0%B4%D1%80%D0%B0%D0%B2%D0%BE")

这会让你回到你的字符串"здраво"