Both irssi and Weechat have per-channel encodings.
Weechat (scriptable in Perl, Python, Ruby, Tcl, Guile and C [plugins]; actively developed)
For current buffer:
/charset encode koi8-r /charset decode koi8-r
For a given buffer:
/set charset.encode.irc.freenode.#postfix-ru koi8-r /set charset.decode.irc.freenode.#postfix-ru koi8-r
For a given network:
/set charset.encode.irc.rusnet cp1251 /set charset.decode.irc.rusnet cp1251
Global:
/set charset.default.encode utf-8 /set charset.default.decode iso8859-1
Note: Weechat always tries UTF-8 first, and uses charset.default.decode as fallback. If this causes problems, it's likely to be fixed quickly when reported.
irssi (scriptable in Perl and C [plugins]):
For a given network tag/channel:
/recode add freenode/#postfix-ru koi8-r
For a given network tag:
/recode add rusnet cp1251
Defaults:
/set recode_out_default_charset utf-8 /set recode_fallback iso8859-1
Note: "network tag" can differ from network name; if you do
/connect freenode
twice, it will open connections taggedfreenode
andfreenode2
.