[ wex-alpha @ 21.01.2011. 12:42 ] @
Moja aplikacija treba da štampa latinicna slova na jednom uredjaju. U pitanju je POS sistem.

Imam veliki problem sa Šš i Žž slovima. Ostala slova sam riješio tako da parsiram tekst za stampu sa sljedecim vrijednostima:

è-č
æ-ć
ð-đ
È-Č
Æ-Ć

Na dosta mjesta na internetu se spominje da saljem Žž i Šš i trebalo bi da se stampaju bez problema. Ali u mom slucaju ne radi.

Koristim dll koji komunicira sa uredjajem. Nazalost nemam dokumentaciju dll-a.


Da li postoji neki char koji saljem umjesto Šš i Žž?


Hvala
[ mmix @ 21.01.2011. 13:27 ] @
ŠšŽž su na istim kodovima i u 1250 i u 1252, zato su ti i rekli da to radi (i radi). Mozda ti je neki problem u konverziji stringova, mada bi i iz unicode-a u bilo kom encodingu morali da se mapiraju na ove kodove.

Probaj da posaljes karaktere kao kodove 0x8A, 0x9A, 0x8E, 0x9E?




[ Boris B. @ 22.01.2011. 13:23 ] @
Znači ti njemu pošalješ "è" a on odštampa "č"? Ako sam te dobro razumeo onda napravi rainbow i vidi šta dobiješ:

for i = 14 to 254
print( i + ": " + ansichar(i))

trebalo bi da dobijes nešto kao:
...
65: A
66: B
...

Potraži onda samo kod za Š i Ž


[ wex-alpha @ 24.01.2011. 09:22 ] @
Borise to je bila odlicna ideja. Tako sam i uradio i dobio sam brojni ekvivalent nasih karaktera.

Evo koda



"Rainbow za karaktere od 80 --300"
Code:
 
for (char c = (char)80; c <= (char)300; ++c)
            {
                 
                textBox24.Text += Convert.ToInt32( c) + "-->" + Convert.ToString(c) + " \r\n";

                //ZA SVAKI KARAKTER ISPISI I BROJNI EKVIVALENT DAKLE:
                //  180 --> KARAKTER OVDJE
                //  181 --> KARAKTER OVDJE
                //  182 --> KARAKTER OVDJE
            }







Ovaj kod ispisuje karakter koji ja zadam. Ukucam broj i on ispise karakter.
Code:


            string stosekrijes = "";
            int vrijednost = Convert.ToInt32(textBox26.Text);  //unos broja karaktera preko textboxa
            textBox_Parser.Text = Convert.ToString((char)vrijednost); // stavi taj karakter u textbox
            stosekrijes = Convert.ToString((char)vrijednost); // stavi karakter u string



Sad sam naletio na nevidljive karaktere.

Kad otkucam 138, uredjaj stampa Š.

Ako zelim da vidim koja je graficka reprezentacija char(138) ne polazi mi za rukom.

U aplikaciji mi stoji ako nadjes č, zamijeni ga sa è... i tako dalje. Mislio sam da isto uradim i za ŠŠ i Žž. Ali nikako ne mogu da "ufatim" koji je karakter u pitanju... zasto?

Problem sam rijesio tako da direktno prosljedjujem char(138) u aplikaciju. Ali opet me zanima kako da su ti karakteri nevidljivi? Na koji god nacin da probam da nadjem sta je to uvijek je prazno (BP na string, BP na char...) nema sta nisam radio.


[ Boris B. @ 24.01.2011. 09:49 ] @
Pa .Net radi sa unicode (UTF-16 i interno UTF-8 ), ovaj tvoj API za stampac ocigledno prima ANSI.

"Š", odnosno decimalno 138 je 0x8A u ANSI 1250 i 1252, baš kao što ti je mmix napisao, ja sam ti samo dao predlog kako da ih nadješ ako uredjaj koristi negu egzotičnu OEM tabelu na kakve sam naletao.

Edit: Ubuduce je najbolje da koristis Encoding klasu i i sa njom iskonvertujes Unicode tekst u stagod (ANSI1252 u tvom slucaju), zatim rezultat (byte[]) direktno saljes na stampac
[ mmix @ 24.01.2011. 09:51 ] @
Gde pokusavas da viis graficku reprezentiacju? Konzola? KOnzola prikazuje samo ascii.

138 je 8A, 8A je Š i u easter europe i u western, dakle mora da ti stampa Š kao Š. AKo ne stampa onda imas neki problem u konverziji stringa iz .net unicode-a u ansi, da ne konvertujes u single byte string koristeci neki treci encoding?
[ wex-alpha @ 07.02.2011. 19:55 ] @
Rijseo sam problem na drugi nacin.

sve sto dolazi do stampaca se u letu konvertuje u unicode (fajl) i onda saljem char iz tog fajl. Za divno cudo, radi :)