无法在node.js中转换iTunes XML播放列表

前段时间我写了一个快速的小节点命令行实用工具,将XML格式的iTunes播放列表转换为M3U,XSPF等,这样我就可以在工作的Android系统上使用它们。

*我有一个25吉字节的音乐collections,doubletwist等人只是龙骨,并试图与我的Mac同步

起初这没什么问题,但是随着音乐collections的增长,我遇到了一个问题:任何媒体播放器都无法find任何带有非英文Unicode字符的文件,例如ñ,í和几乎所有的日文汉字。 它并不是每一个造成这个问题的angular色,但大部分是它的一个东西。

由于itunes文件path是部分url编码的(并且不需要匹配目标格式的约束),并且需要部分replace为目标机器上的正确path,所以我有以下代码来处理文件path(剥离不相关的东西):

let location; // need try/catch because some track names contain unescaped '%' that // cause the decode function to throw. try { location = decodeURIComponent(x.location.slice(7)); } catch (e) { // function references a hash of about 200 url encodings and // replaces occurences of them in the path, poor man's (slow) // replacement for the built-in location = replaceURLEscapes(x.location.slice(7)); } 

我已经尝试了decodeURIComponent, decodeURI和我自己的自定义函数上面引用。 这里是一个来自XML文件的例子:

 file:///Users/username/Music/iTunes/iTunes%20Media/Music/Compilations/Chronicles%20of%20Time/3-05%20Melodi%CC%81a%20de%20la%20montan%CC%83a%20(feat.%20Doug%20Perry%20&%20Matheus%20S.%20Garcia%20Souza).m4a 

其中转换为:

 /home/username/Music/Compilations/Chronicles of Time/3-05 Melodía de la montaña (feat. Doug Perry & Matheus S. Garcia Souza).m4a 

这似乎很好,但VLC,克莱门泰因等找不到。 以下是Nautilus的文件名:

 3-05 Melodía de la montaña (feat. Doug Perry & Matheus S. Garcia Souza).m4a 

哪个在path中引用的目录中。 请注意,由decodeURIComponent解释的变形在'a'而不是'n'(我的函数不会产生这个错误,所以这不是问题本身)。 我怎样才能修改这样的媒体播放器可以find轨道?

所以这个问题最终成为了组合angular色。 解码, 标准化和重新编码修复它。