解決した

node.jsのitunes XMLプレイリストの変換に問題がある

フロントエンド

いくつかの時間前に、XML形式のiTunesプレイリストをm3u、xspfなどに変換するための簡単なノードコマンドラインユーティリティを作成しました。これを仕事場のLinuxボックス、アンドロイド電話*などで使用できます。

*私は25 +ギガバイトの音楽コレクションを持っています、ダブルトゥウィストはちょうどキールを超えて、私のMacと同期しようとすると死ぬ

最初はこれは問題ありませんでしたが、私の音楽コレクションが増えたので、私は邪魔になりました。メディアプレイヤーは、ñ、íなどの英語以外のUnicode文字を含むファイルを見つけることはできません。 この問題を引き起こすすべての文字ではなく、大部分はその問題です。

itunesファイルのパスは部分的にURLエンコードされているため(ターゲットフォーマットの制約と一致する必要はない)、ターゲットマシン上の正しいパスに部分的に置き換える必要があるため、次のコードを使用してファイルパス(無関係なものは削除):

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

パス内で参照されているディレクトリ内のものです。 decodeURIComponentによって解釈されるようなdecodeURIComponentは、 'n'ではなく 'a'上にあることに注意してください(私の関数はそのエラーを作らないので、それ自体は問題ではありません)。 メディアプレーヤーがトラックを見つけることができるようにこれを変更するにはどうすればよいですか?


Progress 100%

一番いい

回答

フロントエンド

だから、問題は結局結合文字になった。 デコード、 正規化 、および再エンコードによって修正されます。