リモートアカウントのアバターのURLにエンコードされていない多バイト文字列が含まれている場合
(https://example.com/foo/ダウンロード.jpeg など)
ローカルダウンロードしてストレージに格納する際に、以下のエラーが出て失敗する。
TypeError [ERR_UNESCAPED_CHARACTERS]: Request path contains unescaped characters
おそらく Node v10.0.0 以降のみ該当
https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V10.md#semver-major
http: disallow two-byte characters in URL path
アバター以外でも発生するかもしれない
成功する
失敗する
Node v10.8.0
まだ発生してますね
エラーになったURLの一例
https://pleroma.uwah.moe/media/106dfe0f-0cbe-4623-8d46-79f25aff87ad/[Yousei-gg] Sasami-san@Ganbaranai 06 - Only Parents Give Us Problems [BD 1920x1080 x264 FLAC] 00:05:42.217.jpg
このURLは/[^\u0021-\u00ff]/に一致するのでencodeURIが適用されるはずなんだけどな
URL.parseしたときにURLエンコードが適用されることがあるみたい
いやちがうわ
url.parseとnew URLは挙動が違うっぽい、後者はエンコードされるぽい
https://github.com/syuilo/misskey/commit/987168b863c52d0548050ffbac569782bb9a8cef#diff-388dd1dd931034d33aa8776f2e494b62
🙏🙏🙏
なのでnew URL(url).hrefして渡すだけでいいのかもしれない