内容
Coilのバージョンを 1.4.0
から 2.1.0
に上げたところ、一部のバナー画像が表示されなくなった。
調査
エラーは以下のようなもので、レスポンスヘッダーのcontent-disposition
に無効なキャラクタが含まれているようだ。filenameの「バナー」の部分だろう。
java.lang.IllegalArgumentException: Unexpected char 0x30cf at 22 in content-disposition value: inline; filename="バナー.jpeg" at okhttp3.Headers$Companion.checkValue(Headers.kt:450)
Headers.kt
の該当コードを見ると、特定の範囲の文字コード以外
を弾いていることが分かる(ラムダ部分はrequire()=falseの場合に実行される)。
// okhttp.Headers.checkValue()の内容 private fun checkValue(value: String, name: String) { for (i in value.indices) { val c = value[i] require(c == '\t' || c in '\u0020'..'\u007e') { format("Unexpected char %#04x at %d in %s value", c.toInt(), i, name) + (if (isSensitiveHeader(name)) "" else ": $value") } } }
ということでレスポンスヘッダーのcontent-disposition
に規定の文字列以外があるとエラーになるものと思われる。
結論
Coilのどこが変わったかは不明。strict云々が書かれた部分があったのでその辺かも。 アプリ側でできることはなさそう。 画像のファイル名に日本語を使うのを止めてもらうか、Coilのバージョンを1.4.2に戻す。