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í.

Diskuze: C#, ASP.NET, firebird a čeština

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

Aktivity
Avatar
JOF
Tvůrce
Avatar
JOF:4.11.2012 11:21

Zdravím!
Prosím o pomoc. Potřebuji data z DB firebird.
Pokud napíšu konzolovou aplikaci v C#, tak je čeština v pohodě.
Pokud to samé převedu do ASP.NET, nezobrazují se správně české znaky :(
Konzolová aplikace používá Input i Output Encoding 1250.
Pokusil jsem se stejné kódování nastavit i pro ASP.NET aplikaci, ale asi špatně. Zkoušel jsem:
Globalizace rozhraní .NET na IIS serveru - vše na windows-1250;
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">;
nastavení ve web.config - <globalization fileEncoding="win­dows-1250"
requestEncodin­g="windows-1250" responseEncodin­g="windows-1250" />

Dík za každou radu.

 
Odpovědět
4.11.2012 11:21
Avatar
matesax
Tvůrce
Avatar
Odpovídá na JOF
matesax:4.11.2012 11:27

Jde hlavně o výstup a tomu nastav UTF-8 v HTTP protokolu - takže:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

Ale nyní existuje i meta přímo na charset...

Encoding definuj v MasterPage...

(Ale encoding nesouvisí s ASP. :) a doufám, že děláš v MVC.)

Editováno 4.11.2012 11:29
 
Nahoru Odpovědět
4.11.2012 11:27
Avatar
JOF
Tvůrce
Avatar
JOF:4.11.2012 11:55

Měla by to být jen jednoduchá stránka s výpisem vybraných dat z DB.
Myslel jsem, že to zvládnu i bez MasterPage.
MVC mi zatím nic neříká, ale rád se poučím.
Další problém je se zadáváním hodnot pro vyhledávání v DB -

  • data s diakritikou (např. hledání podle příjmení) nenajde.

Na rozdíl od konzolové aplikace.
Předpokládám, že problém je stejný - kódování češtiny?!

 
Nahoru Odpovědět
4.11.2012 11:55
Avatar
matesax
Tvůrce
Avatar
Odpovídá na JOF
matesax:4.11.2012 12:10

Diakritika v DB - tedy v captionech sloupců = fujtajbl... :) Ty pojmenuj anglicky...

 
Nahoru Odpovědět
4.11.2012 12:10
Avatar
JOF
Tvůrce
Avatar
JOF:4.11.2012 12:12

Názvy sloupců jsou bez diakritiky, ale hledané hodnoty s diakritikou, kterém zadám do textboxů mi v DB (na rozdíl od konzolové aplikace) nenajde.
Hodnoty bez diakritiky jsou OK.

 
Nahoru Odpovědět
4.11.2012 12:12
Avatar
matesax
Tvůrce
Avatar
Odpovídá na JOF
matesax:4.11.2012 12:18

A jak to hledáš? (Doufám, že v dotazech.) Netuším, jak to máš - možná dotazovanou hodnotu převeď do podoby bez diakritiky a hledanou také...

 
Nahoru Odpovědět
4.11.2012 12:18
Avatar
JOF
Tvůrce
Avatar
JOF:4.11.2012 12:23

Hledám to takhle:
FbCommand command = new FbCommand("SELECT IDENT FROM OSOBY WHERE PRIJMENI = @prijmeni AND OSCISLO = @oscislo", connection);
command.Parame­ters.AddWithVa­lue("@prijmeni", tbPrijmeni.Text);
command.Parame­ters.AddWithVa­lue("@oscislo", tbCisloKarty.Text);

object ident = command.Execu­teScalar();

pokud je příjmení s diakritikou, tak nic nenajde :-(

 
Nahoru Odpovědět
4.11.2012 12:23
Avatar
JOF
Tvůrce
Avatar
JOF:4.11.2012 12:40

Pokud zadám do textboxu ç (Alt+135) místo š, tak záznam v DB najde...

 
Nahoru Odpovědět
4.11.2012 12:40
Avatar
matesax
Tvůrce
Avatar
Odpovídá na JOF
matesax:4.11.2012 13:00

Zkus převést text z textboxu:

protected string Convertor(string asciiString)
{
System.Text.Encoding ascii = System.Text.Encoding.ASCII;
System.Text.Encoding utf8 = System.Text.Encoding.UTF8;

byte[] asciiBytes = ascii.GetBytes(asciiString);
byte[] utf8Bytes = System.Text.Encoding.Convert(ascii, utf8,
asciiBytes);

char[] utf8Chars = new char[utf8.GetCharCount(utf8Bytes, 0,
utf8Bytes.Length)];
utf8.GetChars(utf8Bytes, 0, utf8Bytes.Length, utf8Chars, 0);
string utf8String = new string(utf8Chars);

return utf8String;
}
 
Nahoru Odpovědět
4.11.2012 13:00
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na JOF
David Hartinger:4.11.2012 14:07

Databázi bych převedl do UTF8, potom nic nemusíš řešit.

Nahoru Odpovědět
4.11.2012 14:07
New kid back on the block with a R.I.P
Avatar
JOF
Tvůrce
Avatar
Odpovídá na matesax
JOF:4.11.2012 14:18

ten Convertor už jsem zkoušel (i s Encoding.GetEn­coding(1250) )
bohužel to problém nevyřešilo :(

 
Nahoru Odpovědět
4.11.2012 14:18
Avatar
JOF
Tvůrce
Avatar
Odpovídá na David Hartinger
JOF:4.11.2012 14:21

Bohužel ta DB není moje. Připojuji se na DB od jiné firmy.
Její charset je 1250. Překvapilo mne, že přenastavení charset
v connectionStringu z 1250 na UTF8 nemá na nic vliv :o

 
Nahoru Odpovědět
4.11.2012 14:21
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na JOF
David Hartinger:4.11.2012 14:25

V připojení k databázi se dá nastavit, aby navenek vystupovala pod jiným kódováním, moc se v tomhle nevyznám, ale myslím, že na to byl příkaz SET NAMES. Mělo by jít, že se připojíš, něco zavoláš a bude to v UTFKu. Zkus pogooglit.

Nahoru Odpovědět
4.11.2012 14:25
New kid back on the block with a R.I.P
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 13 zpráv z 13.