Feb
26
[Pidgin]現行Yahoo!メッセンジャーでPidginの文字化けを回避するためのパッチとWindowsバイナリ
PidginというIM(Instant Messenger)クライアントがあります。これはMSN MessengerとかYahoo!JAPAN Messengerとか、他にもいろいろなプロトコルに対応した便利なIMクライアントです。Linux上でも動作するので、普段から便利に使っています。
なのですが、ウェブ版Yahoo!メッセンジャーのリリースのタイミングで、メッセージをやりとりするための文字コードがSHIFT-JISからUTF8に変更になったようで、pidginから送ったメッセージが相手に表示されなかったり文字化けを起こしたりするようになってしまいました。
2008年2月26日をもって「バージョン7.0.1.0未満」のWindows版Yahoo!メッセンジャー、および「バージョン2.5」のMacintosh版Yahoo!メッセンジャーのサポートを終了させていただきました。
とあるので、これまでSHIFT-JISとUTF8と両方の文字コードをサポートしていたけど、これからはUTF8一本に統一します、ということかもしれないですね。
仕事でもプライベートでもメッセンジャーを愛用していて、これが使えなくなってしまうととても不便です。
なので、これを回避するためのパッチを作ってみました。
#
# old_revision [d77adf1b9a4b44f121620f20e2643602e3f6776e]
#
# patch "libpurple/protocols/yahoo/util.c"
# from [6a72fcc2054413ee7791e5c5cc62b6b18f4bcce0]
# to [2a3725bcc455684e1c1bb42bd4982cc322732f38]
#
============================================================
--- libpurple/protocols/yahoo/util.c 6a72fcc2054413ee7791e5c5cc62b6b18f4bcce0
+++ libpurple/protocols/yahoo/util.c 2a3725bcc455684e1c1bb42bd4982cc322732f38
@@ -114,18 +114,15 @@ char *yahoo_string_encode(PurpleConnecti
char *ret;
const char *to_codeset;
- if (yd->jp && utf8 && *utf8)
- *utf8 = FALSE;
+ if (yd->jp)
+ return g_strdup(str);
if (utf8 && *utf8) /* FIXME: maybe don't use utf8 if it'll fit in latin1 */
return g_strdup(str);
- if (yd->jp)
- to_codeset = "SHIFT_JIS";
- else
- to_codeset = purple_account_get_string(purple_connection_get_account(gc), "local_charset", "ISO-8859-1");
+ to_codeset = purple_account_get_string(purple_connection_get_account(gc), "local_charset", "ISO-8859-1");
+ ret = g_convert_with_fallback(str, -1, to_codeset, "UTF-8", "?", NULL, NULL, NULL);
- ret = g_convert_with_fallback(str, -1, to_codeset, "UTF-8", "?", NULL, NULL, NULL);
if (ret)
return ret;
else
やっていることは簡単。これまでYahoo!JAPAN MessengerだったらメッセージをSHIFT-JISに変換して送信していたものを、今度からはUTF8のまま送るようにしただけです。
このパッチをあてて作ったWindowsバイナリを置いておくので、よかったら使ってみてください。