Python a nastavení UTF-8

Snažím se zprovoznit zálohu namountovaného disku do AWS S3 nebo Backblaze B2.

V obou případech jsem narazil na problém při čtení souboru z diakritikou z disku. Všechny standardní bashové příkazy pracují se soubory normálně, ale v Pythonu se mi nedaří nijak nastavit UTF-8 a dostávám:

File "/usr/lib/python2.7/site-packages/b2/sync/folder.py", line 220, in _handle_non_unicode_file_name
raise EnvironmentEncodingError(repr(name), sys.getfilesystemencoding())
EnvironmentEncodingError: file name '\xc5\xa0usta Richard' cannot be decoded with system encoding (ASCII). 
We think this is an environment error which you should workaround by setting your system encoding properly, for example like this:
export LANG=en_US.UTF-8

Nicméně žádné nastavení proměných prostředí jako LANG, LC_CTYPE ani PYTHONIOENCODING nepomáhá.

V Pythonu se moc nevyznám, ale problém je IMHO, že default encoding je stále:

python -c 'import sys; print(sys.getdefaultencoding())'
ascii

Nevíte někdo co s tím?

Jinak pro zálohování jsem zkoušel:

  • aws-cli
  • b2

Tohle bych nejspíš řešil přes LXC. Konkrétně v Turris OS (a musl libc) se nijak moc nevyznám, ale jiný přístup než LXC jsem rychle nenašel, takže pokud nemáte důvod se LXC vyhnout…

Třeba někdo jiný ale bude vědět.

1 Like

Mohl bych se Vás zeptat, proč používáte Python 2 a nikoliv Python 3?

Turris 1.1 RC:

root@turris:~# python -c 'import sys; print(sys.getdefaultencoding())'
ascii
root@turris:~# python3 -c 'import sys; print(sys.getdefaultencoding())'
utf-8

Turris MOX, hbd (tedy OpenWrt master):

root@turris:~# python -c 'import sys; print(sys.getdefaultencoding())'
ascii
root@turris:~# python3 -c 'import sys; print(sys.getdefaultencoding())'
utf-8

Ve velice krátké době by měl být přijat následující pull request do OpenWrt, který přidává awscli a jeho závislosti. Takže by to mělo být zase o něco jednodušší s následující verzí OpenWrt 19.xx.
S velkou pravděpodobností se obávám, že se to nedostane do verze 18.06.02. Takže pokud bude vše fungovat, tak jak má, tak balíčky backportnu do Turris OS 4.0.

1 Like

Ah, já myslel že to je závislé na nastavení locale.

@Pepe díky moc za nakopnutí. Python3 pomohl.
Taky mě nenapadlo, že by to bylo jinak v Python 2.x vs. Python 3 a hledal jsem problém v nastavení locale.