import japanese # import japanese codec to setup encodings.aliases. import codecs, pykf class iso2022jp_trad(codecs.Codec): def encode(self, s, errors="strict"): ret = s.encode("ms932", "replace") ret = pykf.tojis(ret, pykf.SJIS, j0208=True) #xxxx: pykf should return lenth not consumed. return (ret, len(s)) def decode(self, s, errors="strict"): ret = pykf.tosjis(s, pykf.JIS) ret = unicode(ret, "ms932", "replace") return ret, len(s) class iso2022jp_trad_writer(iso2022jp_trad, codecs.StreamWriter): pass class iso2022jp_trad_reader(iso2022jp_trad, codecs.StreamReader): pass class eucjp_trad(codecs.Codec): def encode(self, s, errors="strict"): ret = s.encode("ms932", "replace") ret = pykf.toeuc(ret, pykf.SJIS) #xxxx: pykf should return lenth not consumed. return (ret, len(s)) def decode(self, s, errors="strict"): ret = pykf.tosjis(s, pykf.EUC) ret = unicode(ret, "ms932", "replace") return ret, len(s) class eucjp_trad_writer(iso2022jp_trad, codecs.StreamWriter): pass class eucjp_trad_reader(eucjp_trad, codecs.StreamReader): pass # create codec module import sys, imp m = imp.new_module("iso2022_trad") m.getregentry = lambda : (iso2022jp_trad().encode, iso2022jp_trad().decode, iso2022jp_trad_reader, iso2022jp_trad_writer) sys.modules['iso2022_trad'] = m m = imp.new_module("eucjp_trad") m.getregentry = lambda : (eucjp_trad().encode, eucjp_trad().decode, eucjp_trad_reader, eucjp_trad_writer) sys.modules['eucjp_trad'] = m # register alias import encodings.aliases encodings.aliases.aliases.update({ 'euc_jp': 'eucjp_trad', 'iso_2022_jp': 'iso2022_trad', 'iso_2022_jp_1': 'iso2022_trad', 'iso_2022_jp_ext': 'iso2022_trad', }) # clear encoding cache import encodings encodings._cache.clear() # update email.Charset.CODEC_MAP import email.Charset email.Charset.CODEC_MAP.update({ 'euc-jp': 'eucjp_trad', 'iso-2022-jp': 'iso2022_trad', 'shift_jis': 'iso2022_trad', })