IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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# form - vypsání ASCII tabulky

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

Aktivity
Avatar
Michaal.K
Člen
Avatar
Michaal.K:21.9.2017 7:52

Ahoj,
chtěl jsem si zkusit vypsat úplnou ascii tabulku (tj. od 0 do 255). Vše mi funguje v poho a tabulku vypisuji do dataGridView, viz. kód níže:

for (int i = 0; i < 256; i++)
            {
                znak = Convert.ToChar(i);
                dataGridViewASCIITab.Rows.Add(i.ToString("D3"), "0x" + i.ToString("X2"), znak.ToString());
            }

Problém nastane u znaků od 128 do 160, kde se nic nezobrazí a já nevím proč. Potřeboval bych to vysvětlit jestli se jedná o nějaké speciální znaky nebo je to dáno kódováním?
Je mi jasné, že prvních 31 znaků jsou ovládací kódy a netisknutelné znaky, tak jestli od 128 do 160 jsou to podobné typy znaků? Lze je tedy nějak zobrazit? Díky

 
Odpovědět
21.9.2017 7:52
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Michaal.K
Jan Vargovský:21.9.2017 9:30

ASCII je jen 0-127, to jaké znaky jsou dál si už dělal každý tak nějak sám co se mu zrovna hodilo. Proto taky vznikl Unicode. Takže ano, je to kódováním a záleží jaké použiješ.

 
Nahoru Odpovědět
21.9.2017 9:30
Avatar
Michaal.K
Člen
Avatar
Odpovídá na Jan Vargovský
Michaal.K:21.9.2017 9:59

Díky za info.
A je tedy možnost nějakým překódováním tyto znaky zobrazit? Pokud ty znaky vypisuji takto (viz. kód výše) tak se mi nic nezobrazí.

 
Nahoru Odpovědět
21.9.2017 9:59
Avatar
Odpovídá na Michaal.K
Michal Štěpánek:21.9.2017 10:53

V konzoli mi to vypíše jen otazníky (128 - 159), 160 je prázdný...

Nahoru Odpovědět
21.9.2017 10:53
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Peter Sciranka
Tvůrce
Avatar
Odpovídá na Michal Štěpánek
Peter Sciranka:21.9.2017 11:03

Na youtube som nedávno našiel výborný kanál na c# a wpf a chlapík tam má aj video ohľadom ASCII , doporučujem pozrieť, veľmi dobre vysvetlené (je to v angličtine, ale verím že to pre programátorov nie je problém).

Nahoru Odpovědět
21.9.2017 11:03
Act as if it was Impossible to Fail
Avatar
Michaal.K
Člen
Avatar
Odpovídá na Michal Štěpánek
Michaal.K:21.9.2017 12:43

Aha, tak mě to nevypíše ani ty otazníky, viz. obr. A když to krokuji, tak je tam opravdu prázdný znak. Tak fakt nevím....

Editováno 21.9.2017 12:44
 
Nahoru Odpovědět
21.9.2017 12:43
Avatar
Michaal.K
Člen
Avatar
Odpovídá na Peter Sciranka
Michaal.K:21.9.2017 12:44

Ahoj, díky za link. Kouknu na to ;-)

 
Nahoru Odpovědět
21.9.2017 12:44
Avatar
Michaal.K
Člen
Avatar
Michaal.K:22.9.2017 11:30

Tak jsem zatím na nic kloudného nepřišel :-( Poradí mi někdo jak to překódovat aby se znaky od 128 do 160 zobrazily? Díky

 
Nahoru Odpovědět
22.9.2017 11:30
Avatar
Odpovídá na Michaal.K
Luboš Běhounek Satik:22.9.2017 11:39

Co třeba použít jinej font, co ty znaky umí? :)

Nahoru Odpovědět
22.9.2017 11:39
https://www.facebook.com/peasantsandcastles/
Avatar
Michaal.K
Člen
Avatar
Odpovídá na Luboš Běhounek Satik
Michaal.K:22.9.2017 13:40

Ahoj, no to právě nevím jaký font je umí. Zkoušel jsem arial a times new roman a ani jeden je neumí.

 
Nahoru Odpovědět
22.9.2017 13:40
Avatar
dez1nd
Člen
Avatar
Odpovídá na Michaal.K
dez1nd:22.9.2017 13:46

zkus DejaVu Sans Mono, Arial Unicode MS

 
Nahoru Odpovědět
22.9.2017 13:46
Avatar
Michaal.K
Člen
Avatar
Odpovídá na dez1nd
Michaal.K:22.9.2017 14:06

Tak jsem zkoušel Arial Unicode MS a neumí. DejaVu Sans Mono nemám, musím ho stáhnout....

 
Nahoru Odpovědět
22.9.2017 14:06
Avatar
HONZ4
Člen
Avatar
Odpovídá na Michaal.K
HONZ4:22.9.2017 20:42

Jak napsal Jan Vargovský, je to kódováním. Pokud ti jde opravdu pouze o sadu ASCII, ta využívá pouze 127 znaků. Pokud ti jde o ANSI sady jako je např. česká Windows-1250, tak ji musíš určit a podle ní se pak dekódují další znaky. Na to by ti měl stačit např. Arial.

Tady je taková rychlá ukázka konverze byte na char:

static void Main(string[] args)
{
    char c1, c2, c3, c4;
    for (byte w = 1; w != 0; w++)
    {
        var bytes = new byte[] { w };
        c1 = Convert.ToChar(w);
        c2 = System.Text.Encoding.ASCII.GetString(bytes)[0];
        c3 = System.Text.Encoding.GetEncoding(1250).GetString(bytes)[0];
        c4 = System.Text.Encoding.Default.GetString(bytes)[0];

        Console.WriteLine("{0:D3}:   CONV:{1}   ASCII:{2}   1250:{3}   DEF:{4}", w, c1, c2, c3, c4);
    }
    Console.ReadKey();
}
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
22.9.2017 20:42
Avatar
Michaal.K
Člen
Avatar
Odpovídá na HONZ4
Michaal.K:4.10.2017 12:44

Ok díky za vysvětlení a příklad. Už jsem to opravil a vše funguje...

 
Nahoru Odpovědět
4.10.2017 12:44
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 14 zpráv z 14.