NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: České znaky v console arguments

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
krepsy3
Tvůrce
Avatar
krepsy3:15.11.2016 23:00

Ahoj, mám takový speciální dotaz, týkající se složky s diakritikou (jedná se o uživatelskou složku, jako příklad budu používat C:\Users\Kája\Do­cuments\). V mém programu zapisuji do textového souboru takto:

string cesta = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "soubor.txt");
if (Environment.GetCommandLineArgs().Length > 1)
{
        if (Directory.Exists(Environment.GetCommandLineArgs()[1]))
                cesta = Path.Combine(Environment.GetCommandLineArgs()[1], "soubor.txt");
}

{
        /*Zápis*/
}

Jde o to, že pokud chci změnit složku právě přes command line argumenty, není to problém v cmd, prostě tam napíšu

<C:\Users\Kája\Documents\Programy>start prg.exe C:\Users\Kája\Documents\Texty\

A složka se v pořádku změní. Problém nastává u dávkového souboru (.bat), který chci mít vedle programu. Jeho obsah:

@echo off
start prg.exe C:\Users\Kája\Documents\Texty\
exit

Pokud kód výše uložím do .bat jako ANSI nebo UTF-8, složka se bohužel (nejspíš kvůli diakritice) v programu nezmění.
Pokud ho uložím do Unicode, batch nefunguje a ihned se terminuje s tím, že "(nějaké podivné znaky) není rozponán jako interní příkaz či soubor."

Co s tím? Nepište prosím, ať si změním jméno uživatelské složky, hlavně chci, aby to program nebo batch zvládal. Najdou se i jiní uživatelé s diakritikou ve složkách, a tak chci, abych to uměl zvládnout programově ;)

Editováno 15.11.2016 23:00
Odpovědět
15.11.2016 23:00
Programátor je stroj k převodu kávy na kód.
Avatar
HONZ4
Člen
Avatar
HONZ4:16.11.2016 18:14

sice tomu nerozumím, ale nepomůže ti toto vlákno?

 
Nahoru Odpovědět
16.11.2016 18:14
Avatar
krepsy3
Tvůrce
Avatar
Odpovídá na HONZ4
krepsy3:16.11.2016 21:46

No, moc ne. Jde o to, že uložený batch v Unicode nefunguje. V jiných znakových sadách program přečte nesmyslnou cestu, po čemž použije tu výchozí. Koukal jsem na třídu Encoding, ale ta nejde použít na cestu k souboru :(

Nahoru Odpovědět
16.11.2016 21:46
Programátor je stroj k převodu kávy na kód.
Avatar
Odpovídá na krepsy3
Neaktivní uživatel:16.11.2016 22:10

Tady je vlákno o tom - vypadá to, že CMD - batch je jeden velký bugfest, anebo to prostě není implementované. Vyřešil bych to nějak jinak, třeba vedle programu si dal txt soubor, kde budou ty jména složek a souborů, které chceš zpracovat. Tvoje .exe to pak přečte

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
16.11.2016 22:10
Neaktivní uživatelský účet
Avatar
krepsy3
Tvůrce
Avatar
krepsy3:16.11.2016 23:45

Tak pro shrnutí - řešení bylo na dané adrese k nalezení. Protože aplikaci spouštíte pod windows, kde si přirozeně jako Češi nastavíte české kódování, jsou tyto znaky ve výchozím nastavení systému brány ze sady Windows-1250, ve které čte i náš c# program. V Batchi nastavujete znakovou sadu příkazem chcp.
Finální batch má tedy následující podobu:

@echo off
chcp 1250
start C:\Users\Kája\Documents\Texty\
exit
Editováno 16.11.2016 23:46
Nahoru Odpovědět
16.11.2016 23:45
Programátor je stroj k převodu kávy na kód.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.