Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Maros2470
Člen
Avatar
Maros2470:13.3.2014 17:57

Mám dotaz. V rámci učení jsem si vytvořil aplikaci, která mi data do databáze načítá z csv exportovaného z jiného programu. Csv jsem upravil, aby správně zalamoval řádky. Aplikace jej normálně načte, ale zkomolí diakritiku, přitom když csv otevřu v Excel, tak je v pořádku. Kde je chyba? Díky

 
Odpovědět
13.3.2014 17:57
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Maros2470
Jan Vargovský:13.3.2014 18:08

V kódování.

 
Nahoru Odpovědět
13.3.2014 18:08
Avatar
Maros2470
Člen
Avatar
Odpovídá na Jan Vargovský
Maros2470:13.3.2014 18:17

Můžeš mi poradit jak na to? Prohledal jsem kde co a nevím si rady. Teprve začínám. Díky

 
Nahoru Odpovědět
13.3.2014 18:17
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Maros2470
Jan Vargovský:13.3.2014 18:25

Načítej to v takovém kódování v jakém jsi to uložil. Nevím jakým způsobem to načítáš, ale určitě tam bude způsob jak tomu říct co za kódování to má použít.

 
Nahoru Odpovědět
13.3.2014 18:25
Avatar
Maros2470
Člen
Avatar
Maros2470:13.3.2014 18:50

Když ten csv vytvořím v mé aplikaci a potom jej zpátky načítám je vše v pořádku. Problém nastane, když načítám externí soubor. Dá se nějak změnit kódování přímo u csv, nebo u mé aplikace při vytváření ve VS?

 
Nahoru Odpovědět
13.3.2014 18:50
Avatar
D0tNetL0ver
Člen
Avatar
Odpovídá na Maros2470
D0tNetL0ver:13.3.2014 20:18
System.Text.Encoding.GetEncoding(1250)
Editováno 13.3.2014 20:19
 
Nahoru Odpovědět
13.3.2014 20:18
Avatar
Maros2470
Člen
Avatar
Odpovídá na D0tNetL0ver
Maros2470:13.3.2014 21:03

Díky za radu. Hned to zkusím.

 
Nahoru Odpovědět
13.3.2014 21:03
Avatar
Maros2470
Člen
Avatar
Odpovídá na D0tNetL0ver
Maros2470:13.3.2014 21:14

Tak jsem to zkusil, ale načítá to pořád blbě.

 
Nahoru Odpovědět
13.3.2014 21:14
Avatar
gcx11
Tvůrce
Avatar
gcx11:13.3.2014 21:21

V jakém kódování je ten soubor uložený?
Zkus tohle:

System.Text.Encoding.GetEncoding(65001)

Pokud to nepůjde tak zkus kódy odsuď:
http://msdn.microsoft.com/…vs.110).aspx

 
Nahoru Odpovědět
13.3.2014 21:21
Avatar
Maros2470
Člen
Avatar
Odpovídá na gcx11
Maros2470:13.3.2014 21:38

Jaké kódování používá VS 2010? Když totiž vytvořím csv v mé aplikaci, tak jej aplikace načte v pohodě, ale v Excel je to nečitelné a naopak externí csv je v Excel v pohodě, ale v mé aplikaci je rozhozené. Asi nellepší by bylo změnit kódování přímo u csv, aby bylo stejné s VS, ale nevím jak. Prostě jsem Lama

 
Nahoru Odpovědět
13.3.2014 21:38
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Maros2470
Petr Nymsa:13.3.2014 21:48

Vs nepoužívá žádné kódování ale záleží v jaké kódování soubory ukládáš. V C# prostě "řekneš" jakým způsobem a v jakém kódování to má uložit. VS s tím nemá nic společného

Nahoru Odpovědět
13.3.2014 21:48
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Jan Vargovský
Tvůrce
Avatar
Jan Vargovský:13.3.2014 22:01

Co použít tento konstruktor?

(string path, bool detectEncodingFromByteOrderMarks)

Jestli teda používáš pro načítání StreamReader

 
Nahoru Odpovědět
13.3.2014 22:01
Avatar
Maros2470
Člen
Avatar
Odpovídá na Petr Nymsa
Maros2470:13.3.2014 22:14

Jestli to dobře chápu, tak system.text.en­coding() nastavuje kódování toho csv, které vytvářím?

 
Nahoru Odpovědět
13.3.2014 22:14
Avatar
coells
Tvůrce
Avatar
Odpovídá na Petr Nymsa
coells:13.3.2014 22:22

Zirko, VS interně používá Unicode UTF-16 encoding.
Soubory se ukládají v encodingu podle kultury prostředí, defaultně na českých windows jako CP-1250.
Řada aplikací na českých windows používá ANSI encoding nebo UTF-8 a pak se rozbíjí diakritika.
Java zase defaultně používá ISO-8859-2, což je lehce nekompatibilní s CP-1250 a ukazatelem je většinou rozbité š, č, ř.

@pako: detectEncodin­gFromByteOrder­Marks je obvykle implicitně zapnutý a jde použít jenom v případě, že už je soubor uložený s tzv. preamble znaky, které určují encoding

 
Nahoru Odpovědět
13.3.2014 22:22
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na coells
Petr Nymsa:14.3.2014 7:04

Aha :) Tak díky za nové informace

Nahoru Odpovědět
14.3.2014 7:04
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Maros2470
Člen
Avatar
Odpovídá na coells
Maros2470:14.3.2014 18:49

Můžeš mi Zirko poradit co s tím mým problémem? Můj výtvor šlape, jen s tou diakritikou mám problém

 
Nahoru Odpovědět
14.3.2014 18:49
Avatar
Maros2470
Člen
Avatar
Maros2470:14.3.2014 19:32

CSV načítám takto:

using (StreamReader sr = new StreamReader(@"revize.csv"))
            {
                string s;

                while ((s = sr.ReadLine()) != null)
                {

                    string[] rozdeleno = s.Split(';');
                    string customer = rozdeleno[0];
                    string place_1 = rozdeleno[1];
                    string place_2 = rozdeleno[2];
                    string place_3 = rozdeleno[3];
 
Nahoru Odpovědět
14.3.2014 19:32
Avatar
coells
Tvůrce
Avatar
Odpovídá na Maros2470
coells:14.3.2014 20:18

Zkus nahradit vytvoření stream readeru následujícím kódem.

new StreamReader(@"revize.csv", Encoding.Default)

Pokud by to stále nefungovalo, tak nějaká z následujících variant by měla.

new StreamReader(@"revize.csv", Encoding.GetEncoding(1250))
new StreamReader(@"revize.csv", Encoding.UTF8)
 
Nahoru Odpovědět
14.3.2014 20:18
Avatar
Maros2470
Člen
Avatar
Odpovídá na coells
Maros2470:14.3.2014 21:02

Díky moc, šlape hned ta první varianta.

 
Nahoru Odpovědět
14.3.2014 21:02
Avatar
Joe Walker
Tvůrce
Avatar
Odpovídá na coells
Joe Walker:12.7.2018 15:19

Moc děkuji. Taky jsem to zrovna potřeboval do práce.

 
Nahoru Odpovědět
12.7.2018 15:19
Avatar
Jan Procházka:12.7.2018 17:26

Jo, Excel generuje csv dle prostředí, zde CP-1250. Navíc stejně se chová i k dalším jazykovým vlastnostem, oddělovač sloupců je středník a desetinná je čárka. Nemám ponětí, jak tohle @!# chování ošálit.

Napsal jsem si batch skript pro generování zdrojáků pro LuaLaTeX a kompilaci do pdf a dlouho jsem se s tím "zdržoval".

Nakonec jsem tuhle "vlastnost" "obešel" otevřením zmíněného csv v PSPadu a změnou kódování z CP-1250 (nativní M$) na UTF-8 (nativní pro batch a LuaLaTeX)...

 
Nahoru Odpovědět
12.7.2018 17:26
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 21 zpráv z 21.