У меня есть коллега, чей компьютер не запускает скрипт Python, использующий модуль dateutil.tz; есть имя часового пояса '\xc3\xc0\xb9\xfa\xc9\xbd\xb5\xd8\xb1\xea\xd7\xbc\xca\xb1\xbc\xe4'
, которое отображается, а в dateutil.tz
есть этот код:
def tzname_in_python2(namefunc):
"""Change unicode output into bytestrings in Python 2
tzname() API changed in Python 3. It used to return bytes, but was changed
to unicode strings
"""
def adjust_encoding(*args, **kwargs):
name = namefunc(*args, **kwargs)
if name is not None and not PY3:
name = name.encode()
return name
return adjust_encoding
, который ломается, потому что рассматриваемая строка не является ASCII. Что это за строка? Это не похоже на действительный Unicode:
>>> a = '\xc3\xc0\xb9\xfa\xc9\xbd\xb5\xd8\xb1\xea\xd7\xbc\xca\xb1\xbc\xe4'
>>> a.decode('utf8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\app\python\anaconda\2\envs\emblaze\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xc3 in position 0: invalid continuation byte
Мой скрипт на Python содержит
timezone = dateutil.tz.tzlocal()
и результирующий объект не запускается timezone.tzname(some_timestamp)
из-за не-ASCII-природы имени часового пояса.