UnicodeEncodeError: 'latin-1' codec can't encode character
python | error
При запуску python-скрипта через консоль, який мав взяти дані БД з колонки де були кириличні літери виникала помилка:
UnicodeEncodeError: 'latin-1' codec can't encode character '\u041b' in position 26: ordinal not in range(256)
$ ./_plates_to_json.py
--- Logging error ---
...
Traceback (most recent call last):
File "/home/.../cgi-bin/./_plates_to_json.py", line 83, in <module>
f_out_sec.write(comma + '{' + f'"id":"{row.carid}",...' + '}')
UnicodeEncodeError: 'latin-1' codec can't encode character '\u041b'
in position 26: ordinal not in range(256)
⁉️Причому, цей самий скрипт працював без проблем, коли запускався як subprocess з іншого скрипта...
plates_json_maker ='/cgi-bin/_plates_to_json.py'try: subpr_res = subprocess.check_output([plates_json_maker], text=True)# text=True - повертає строку, а не байтиexcept subprocess.CalledProcessError as e: subpr_err = f'Помилка при оновленняі JSON: {e.returncode}' log.error(subpr_err)else: log.debug('Все Ok')
Причина
В системі VDS, що використовувався, стояла локаль за замовчуванням ISO-8859-1 що і є latin-1 (про яку писалося в помилці), яка оперує лише 256 символами:
cat /etc/default/locale
# File generated by update-localeLANG="en_US"LANGUAGE="en_US:"