Předběžné poznámky:
-
sftp musí použijte UTF-8 jako kódování souboru (viz například odkaz zde). Existují však klienti a servery, které tento požadavek nedodržují a porušují specifikace, což může být příčinou vašeho problému.
-
Napsali jste:"Všimněte si, že jsem uvedl komentář:AcceptEnv LANG LC_*. Podle zde to znamená, že server klientovi nedovolí předávat proměnné prostředí národního prostředí."
Může dojít k nedorozumění ohledně toho, jak to funguje a k čemu je to dobré. Kdykoli spolu dva stroje komunikují, musí používat stejné datové formáty. Předpokládejme například, že VisualCron vloží názvy souborů zakódované jako ISO 8859-1 do bajtového toku, který odešle na server Ubuntu, ale přinutíte server Ubuntu, aby interpretoval příchozí bajtový tok (název souboru), jako by byl zakódován v UTF- 8. To se nevyřeší problémy, ale způsobit je.
Když jsem řekl toto:
Nejprve bych zkusil zjistit, kde přesně problém vzniká. Pevně předpokládám, že máte přístup SSH nebo dokonce fyzický přístup (klávesnici) k serveru Ubuntu. Potom
-
Zkontrolujte, zda je národní prostředí
en_US.UTF-8
je vůbec nainstalován na serveru Ubuntu. Vezměte prosím na vědomí, že stačí nastavitLC_
aLANG
proměnné prostředí není nainstalovat národní prostředí.Místo toho byste nainstalovali národní prostředí během instalace O/S nebo pomocí něčeho jako
dpkg-reconfigure locales
(v debianu - Ubuntu neznám). -
Pokud používáte SSH, ujistěte se, že váš terminálový software SSH (např. Putty) používá stejné kódování jako server.
-
Pak nejdůležitější krok:Pomocí terminálu SSH ručně vytvořte v příslušném adresáři soubor s problematickým názvem, aby jej viděl klient sftp na vašem notebooku s Windows.
Například, když se vrátíme k vaší otázce, můžete vytvořit soubor s názvem
Liège.txt
ve vašem/tickets
adresář (touch /tickets/Liège.txt
). Znovu pomocí terminálu SSH pečlivě zkontrolujte, zda se název souboru zobrazuje správně, když necháte Ubuntu vypsat soubory v tomto adresáři (ls -al /tickets
). -
Nyní použijte klienta sftp na svém notebooku s Windows a zkontrolujte, zda správně stahuje nově vytvořený soubor.
Pokud to funguje, znamená to, že váš problém nastane, když VisualCron přenese soubory na server Ubuntu. Pokud to nefunguje, problém je mezi vaším notebookem se systémem Windows a serverem Ubuntu.
V obou případech existují nástroje, které vám mohou pomoci analyzovat situaci.
Například můžete získat určitý přehled z hraní si s convmv, který dokáže převádět názvy souborů z jednoho kódování do druhého. Zejména můžete převést kódování názvů souborů z UTF-8 na UTF-8 . Když to uděláte a jste si jisti, že název souboru je již zakódován v UTF-8, nesmí se během převodu změnit.
Můžete se také podívat do chardet, což je knihovna Pythonu, která se snaží uhodnout kódování např. názvy souborů. Nejsem Python chlap, takže vám nemohu pomoci se zdrojovým kódem. Podle přijaté odpovědi na tuto otázku byste měli řádek jako chardet.detect(os.popen("ls yourfilename.txt").read())
ve vašem skriptu Python, který vydá nejpravděpodobnější kódování spolu s hodnocením spolehlivosti.
Abych to shrnul:
-
Ujistěte se, že názvy souborů na vašem serveru Ubuntu skutečně jsou zakódovány v UTF-8 podle výše uvedených kroků a pomocí výše uvedených nástrojů.
-
Jakmile si budete naprosto jisti, že názvy souborů na vašem serveru Ubuntu jsou kódovány v UTF-8, zkontrolujte, zda je váš sftp klient na vašem notebooku dokáže stáhnout. Pokud ne, zkuste jiné klienty, dokud to nebude fungovat.
-
Pokud jste zjistili, že ne všechny názvy souborů na serveru Ubuntu jsou kódovány v UTF-8, upravte odpovídajícím způsobem nastavení ve VisualCronu. Neznám VisualCron, a proto vám s tím nemohu pomoci.