import re import locale def test(pat, s): _, enc = locale.getlocale() if re.match(pat, s, re.I|re.L): print(' %r (%r) matches %r (%r)' % (pat, pat.decode(enc), s, s.decode(enc))) else: print(" %r (%r) doesn't match %r (%r)" % (pat, pat.decode(enc), s, s.decode(enc))) print('locale', locale.setlocale(locale.LC_CTYPE, 'ru_RU.koi8-r')) test(b'1\xa3', b'1\xb3') test(b'1\xa3', b'1\xbc') print('locale', locale.setlocale(locale.LC_CTYPE, 'ru_RU.cp1251')) test(b'1\xa3', b'1\xb3') test(b'1\xa3', b'1\xbc') print('locale', locale.setlocale(locale.LC_CTYPE, 'ru_RU.cp1251')) test(b'2\xa3', b'2\xb3') test(b'2\xa3', b'2\xbc') print('locale', locale.setlocale(locale.LC_CTYPE, 'ru_RU.koi8-r')) test(b'2\xa3', b'2\xb3') test(b'2\xa3', b'2\xbc')