Closed ma8ma closed 6 months ago
書き込みログを表示したときスレタイに入っている絵文字が文字参照のまま表示される
バグの説明
書き込みログを表示したときスレタイに入っている絵文字が文字参照のまま表示されると報告がありました。
https://next2ch.net/test/read.cgi/linux/1654053581/184
スレタイに絵文字が入ってると 書き込みログのスレタイの絵文字が🐙みたいになる 本文のほうは絵文字も表示されます
スレタイに絵文字が入ってると 書き込みログのスレタイの絵文字が🐙みたいになる
本文のほうは絵文字も表示されます
再現の方法
設定(C)
一般(G)
書き込みログを保存する(A)
ツール(T)
書き込みログの表示(P)
やりたかったこと・期待する結果
ログを表示したとき文字参照ではなく絵文字で表示する
スクリーンショット
なし
動作環境
[バージョン] JDim 0.11.0-beta20240107(git:f6562adfde) [ディストリ ] Ubuntu 23.10 (x86_64) [パッケージ] バイナリ/ソース( <配布元> ) [ DE/WM ] KDE [ gtkmm ] 3.24.8 [ glibmm ] 2.66.6 [ TLS lib ] GnuTLS 3.8.1 [オプション ] '--with-alsa''--with-pangolayout' [ そ の 他 ]
追加の情報
書き込みログの保存処理を調べたところ問題点がありました。 JDimの書き込みビューに入力されたUTF-8テキストをログのデータとして保存しますが スレタイだけDATに由来するUTF-8テキストでShift_JISにない文字が文字参照にエスケープされています。
https://github.com/JDimproved/JDim/blob/f6562adfde04f57a71d9e70d4b6c194db0b86723/src/message/messageviewbase.cpp#L1070-L1076
ログの保存形式はHTMLなので保存するとき特殊文字を文字参照にするエスケープ処理が入りますが エスケープ済のスレタイは二重にエスケープ(&→&)されてしまいログを表示するとき(&→&)に文字化けしているようです。
&
&
https://github.com/JDimproved/JDim/blob/f6562adfde04f57a71d9e70d4b6c194db0b86723/src/message/logmanager.cpp#L315-L322
対応策としてはHTMLに保存する前にスレタイに含まれる文字参照をデコードしてUTF-8テキストにすることで二重エスケープを回避します。 ただし、これまでに保存されたログは文字参照のまま表示されるためログのHTMLファイルを手動で編集して直さないといけません。
書き込みログを表示したときスレタイに入っている絵文字が文字参照のまま表示される
バグの説明
書き込みログを表示したときスレタイに入っている絵文字が文字参照のまま表示されると報告がありました。
https://next2ch.net/test/read.cgi/linux/1654053581/184
再現の方法
設定(C)
>一般(G)
にある書き込みログを保存する(A)
をチェックするツール(T)
にある書き込みログの表示(P)
を選択してログを表示するやりたかったこと・期待する結果
ログを表示したとき文字参照ではなく絵文字で表示する
スクリーンショット
なし
動作環境
追加の情報
書き込みログの保存処理を調べたところ問題点がありました。 JDimの書き込みビューに入力されたUTF-8テキストをログのデータとして保存しますが スレタイだけDATに由来するUTF-8テキストでShift_JISにない文字が文字参照にエスケープされています。
https://github.com/JDimproved/JDim/blob/f6562adfde04f57a71d9e70d4b6c194db0b86723/src/message/messageviewbase.cpp#L1070-L1076
ログの保存形式はHTMLなので保存するとき特殊文字を文字参照にするエスケープ処理が入りますが エスケープ済のスレタイは二重にエスケープ(
&
→&
)されてしまいログを表示するとき(&
→&
)に文字化けしているようです。https://github.com/JDimproved/JDim/blob/f6562adfde04f57a71d9e70d4b6c194db0b86723/src/message/logmanager.cpp#L315-L322
対応策としてはHTMLに保存する前にスレタイに含まれる文字参照をデコードしてUTF-8テキストにすることで二重エスケープを回避します。 ただし、これまでに保存されたログは文字参照のまま表示されるためログのHTMLファイルを手動で編集して直さないといけません。