From 130518d2d521f2972c9e6aba5038c4927f235dc7 Mon Sep 17 00:00:00 2001 From: Oleg Broytman Date: Mon, 25 Jul 2016 19:05:26 +0300 Subject: [PATCH] Fix encoding for Py3 compatibility --- m_lib/rus/lat2rus.py | 20 ++++++++++++++------ m_lib/rus/rus2lat.py | 21 +++++++++++++++------ 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/m_lib/rus/lat2rus.py b/m_lib/rus/lat2rus.py index 4e3d580..16d82f1 100755 --- a/m_lib/rus/lat2rus.py +++ b/m_lib/rus/lat2rus.py @@ -81,27 +81,32 @@ lat2koi_d = { "%": ":", "^": ",", "&": ".", - "*": ";" + "*": ";", } def make_lat2xxx(encoding="cp1251"): d = {} for k, v in lat2koi_d.items(): - v = unicode(v, "koi8-r").encode(encoding) + if isinstance(v, bytes): + v = v.decode("koi8-r") + v = v.encode(encoding) d[k] = v return d -from m_lib.lazy.dict import LazyDictInitFunc +from ..lazy.dict import LazyDictInitFunc lat2win_d = LazyDictInitFunc(make_lat2xxx, encoding="cp1251") def lat2rus(instr, lat2rus_d = lat2koi_d): out = [] for c in instr: - out.append(lat2rus_d.get(c, c)) - return ''.join(out) + c = lat2rus_d.get(c, c) + if isinstance(c, bytes): + c = c.decode('koi8-r') + out.append(c.encode('koi8-r')) + return b''.join(out) lat2koi = lat2rus @@ -114,4 +119,7 @@ if __name__ == "__main__": Test = "Ghbdtn nt,t^ ghtrhfcysq vbh!" print("Test:", Test) print("ôÅÓÔ:", lat2koi(Test)) - print("ôÅÓÔ:", unicode(lat2win(Test), "cp1251").encode("koi8-r")) + test = lat2win(Test) + if isinstance(test, bytes): + test = test.decode("cp1251") + print("ôÅÓÔ:", test.encode("koi8-r")) diff --git a/m_lib/rus/rus2lat.py b/m_lib/rus/rus2lat.py index 7fbbf06..e7f731b 100755 --- a/m_lib/rus/rus2lat.py +++ b/m_lib/rus/rus2lat.py @@ -71,26 +71,33 @@ koi2lat_d = { "Ù": "y", "Ü": "e", "À": "yu", - "Ñ": "ya" + "Ñ": "ya", } def make_xxx2lat(encoding="cp1251"): d = {} for k, v in koi2lat_d.items(): - k = unicode(k, "koi8-r").encode(encoding) + if isinstance(k, bytes): + k = k.decode("koi8-r") + k = k.encode(encoding) d[k] = v return d -from m_lib.lazy.dict import LazyDictInitFunc +from ..lazy.dict import LazyDictInitFunc win2lat_d = LazyDictInitFunc(make_xxx2lat, encoding="cp1251") def rus2lat(instr, rus2lat_d = koi2lat_d): out = [] for c in instr: - out.append(rus2lat_d.get(c, c)) - return ''.join(out) + c = rus2lat_d.get(c, c) + if isinstance(c, bytes): + c = c.decode('ascii') + elif isinstance(c, int): + c = chr(c) + out.append(c.encode('ascii')) + return b''.join(out) koi2lat = rus2lat @@ -103,4 +110,6 @@ if __name__ == "__main__": Test = "ýÅÒÂÁËÏ× éÇÏÒØ çÒÉÇÏÒØÅ×ÉÞ. áâ÷ xyz ÁÂ× øøüàñ ßØÜÀÑ" print("Test:", Test) print("ôÅÓÔ:", koi2lat(Test)) - print("ôÅÓÔ:", win2lat(unicode(Test, "koi8-r").encode("cp1251"))) + if isinstance(Test, bytes): + Test = Test.decode("cp1251") + print("ôÅÓÔ:", win2lat(Test.encode("cp1251"))) -- 2.39.2