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

Člen

Zobrazeno 21 zpráv z 21.
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Můžeš mi poradit jak na to? Prohledal jsem kde co a nevím si rady. Teprve začínám. Díky
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.
System.Text.Encoding.GetEncoding(1250)
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
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
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
Co použít tento konstruktor?
(string path, bool detectEncodingFromByteOrderMarks)
Jestli teda používáš pro načítání StreamReader
Jestli to dobře chápu, tak system.text.encoding() nastavuje kódování toho csv, které vytvářím?
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: detectEncodingFromByteOrderMarks 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
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
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];
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)
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)...
Zobrazeno 21 zpráv z 21.