JDimproved / JDim

2ch browser for linux
https://jdimproved.github.io/JDim/
GNU General Public License v2.0
44 stars 11 forks source link

5chのagreeとkesサーバーにある板を読み込むとスレ一覧が文字化けする #1265

Closed ma8ma closed 9 months ago

ma8ma commented 9 months ago

5chのagreeとkesサーバーにある板を読み込むとスレ一覧が文字化けする

バグの説明

5chのagreeとkesサーバーにある板を読み込むとスレ一覧が文字化けすると報告がありました。

https://mao.5ch.net/test/read.cgi/linux/1689151433/664-679n

再現の方法

  1. https://agree.5ch.net または https://kes.5ch.net をwebブラウザで開く
  2. 一覧から板のURLをコピーする
  3. JDimを起動してURLコピーした板を開く
  4. スレ一覧が開かれるが文字化けしている
  5. 文字化けしたままスレを開くとスレも文字化けする

やりたかったこと・期待する結果

文字化けせず板やスレを開く。

スクリーンショット

なし

動作環境

[バージョン] JDim 0.10.1-20230930(git:cb13c3d894)
[ディストリ ] Ubuntu 23.04 (x86_64)
[パッケージ] バイナリ/ソース( <配布元> )
[ DE/WM ] KDE
[ gtkmm  ] 3.24.7
[ glibmm  ] 2.66.6
[ TLS lib ] GnuTLS 3.7.8
[オプション ] '--with-alsa''--with-pangolayout'
[ そ の 他 ] 

追加の情報

文字化けの原因

JDimで板を開くとsubject.txtを取得しますがHTTPレスポンスにContent-Typeヘッダーが含まれています。 2023-10-01 時点では、agreeやkesサーバーが返すsubject.txtContent-Typeはcharsetがutf8と指定されています。 しかし、テキストのエンコーディングはshift_jisなのでHTTPからエンコーディングを判定した結果、内容と不一致が起こり文字化けしたようです。

1123 で追加されたテキストエンコーディングを変更する機能を使えば文字化けを直すことができますが

subject.txtを取得するとエンコーディングが再判定されて文字化けが再発します。

5chのサーバーメンテナンス

https://agree.5ch.net/test/read.cgi/operate/1673084281/217 charsetの問題との関係は不明ですが 2023-09-25 の週からサーバーメンテナンスが行われているようです。

修正のアイデア

ma8ma commented 9 months ago

1266

応急処置としてエンコーディング設定が有効のとき文字化けが再発しないように修正しました。

about:config の「(安全でない) スレ一覧とスレビューのプロパティにあるエンコーディング設定を有効にする」が"はい"のときは、HTTPヘッダーやHTMLデータに含まれるエンコーディング情報を無視して板のプロパティで設定されたエンコーディングを優先します。

設定を優先する挙動は不自然でないと思いますが正式な動作とするか未定です。 エンコーディング設定が無効のときは文字化けが続いていますがなるべく歪にならない方法を探しています。

ma8ma commented 9 months ago

1272

エンコーディング設定が無効のときデフォルトのエンコーディングを使う設定を実装しました。

about:configの「(安全でない) スレ一覧とスレビューのプロパティにあるエンコーディング設定を有効にする」 と板のプロパティに追加した「(実験的な機能) エンコーディングの判定」を設定変更することで3つのモードが利用できます。

さらにHTTPヘッダーではなく取得したテキストからエンコーディングを判定するモードの追加を考えています。

ma8ma commented 9 months ago

板のプロパティにエンコーディングを判定する方法を追加しました。

この設定は about:config の「(安全でない) スレ一覧とスレビューのプロパティにあるエンコーディング設定を有効にする」が"はい"のときは利用できません。 このオプションは実験的なサポートのため変更または廃止の可能性があります。

互換性の注意: 修正前の動作は「HTTPヘッダーのエンコーディング情報を使う」ですが、修正後は「デフォルト設定を使う」が初期設定になり動作が変更されます。

機能実装を終えたためissueを閉じます。