tablica z ascii

0

Witam. Mam pytanie,w jaki sposób zdefiniować tablicę która by miała w sobie poszczególne znaki polskie w kodzie ascii.
Jest mi to potrzebne do napisania konwertera który by podmieniał miejscami elementy tablicy po ich wykryciu.
Chciałem to zrobić stosując poczciwego fora: np: przy konwertowaniu na mazovia itp.
Wcześniej robiłem to w c++ i nie miałem problemów.. ale teraz nie mogę sobie z tym poradzić.
Z góry wielkie dzięki za wszelką pomoc.

    public partial class Form1 : Form
    {
        string tekst;
        int dlugosc;
        string abcdef;

    ??   char[] tablica = new char[16]  {'a', 'c','e','l','o','s','z','z','A','C','E','L','O','S','Z','Z'};
   ??    char[] tablicapl = new char[17] { 'a' , 'ć', 'ę', 'ł', 'ó', 'ś', 'ż','ź','Ą','C','Ę','Ó','Ł','Ó','Ś','Ż','Ź'};
 //??  char[] cp852 = new char[16] { '0xA5', '0x86', '0xA9', '0x88', '0xE4', '0x98', '0xAB', '0xBE', '0xA4', '0x8F', '0x9D', '0xA8', '0x97', '0x8D', '0xBD', '0xA8'};
 // ??    char[] iso8859 = new char[16] { 177, 230, 234, 179, 241, 182, 188, 191, 161, 198, 163, 209, 211, 166, 172, 175, 202 };
//  ??    char[] win1250 = new char[16] { 0xB9, 0xE6, 0xEA, 0xB3, 0xF1, 0x9c, 0x9F, 0xBF, 0xA5, 0xE6, 0xA3, 0xD1, 0x8C, 0x8F, 0xAF, 0xCA };
//      char[] unicode = new char[16] { 165, 134, 169, 136, 228, 152, 171, 190, 164, 143, 157, 227, 151, 141, 189, 168 };
   //   char[] mazovia = new char[16] { 134, 141, 145, 146, 164, 158, 166, 167, 143, 149, 156, 165, 152, 160, 161, 144 };

       int j = 0;
        int i = 0;
        string zdanie;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string zdanie = Convert.ToString(textBox1.Text);
            for (int i = 0; i < textBox1.Text.Length; i++)
                for (j = 1; j < 16; j++)
                {

                    if ( textBox1.Text[i] == tablica[j])
                    {
                        zdanie[i]=tablicapl[j]
                    }
                }             
                     
               
                       textBox2.AppendText(zdanie);
        }
  

Czy można to zrobić w inny sposób??

0

A z czym masz problem, zobacz swój kod: dlaczego pierwsze dwie tablice mają różne rozmiary, popełniłeś w nich kilka literówek. Jakiego efektu oczekujesz? Dla jakich danych nie działa ?
Nie możesz odwoływać się do litery w stringu poprzez index, ten indexer jest tylko do odczytu.

            char[] latin = new char[] { 'a', 'c', 'e', 'l', 'o', 's', 'z', 'z', 'A', 'C', 'E', 'L', 'O', 'S', 'Z', 'Z' };
            char[] polish = new char[] { 'ą', 'ć', 'ę', 'ł', 'ó', 'ś', 'ż', 'ź', 'Ą', 'Ć', 'Ę', 'Ł', 'Ó', 'Ś', 'Ż', 'Ź' };
            string plText = "ąężźćłóŚć毯ŻŹŹĆ";
            bool exist;
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < plText.Length; i++)
            {
                exist = false;
                for (int j = 0; j < polish.Length; j++)
                {
                    if (plText[i].Equals(polish[j]))
                    {
                        builder.Append(latin[j]);
                        exist = true;
                        break;
                    }
                }
                if (!exist) builder.Append(plText[i]);
            }

            Console.WriteLine(builder.ToString());
0
serwert napisał(a)

Witam. Mam pytanie,w jaki sposób zdefiniować tablicę która by miała w sobie poszczególne znaki polskie w kodzie ascii.
Jest mi to potrzebne do napisania konwertera który by podmieniał miejscami elementy tablicy po ich wykryciu.
Chciałem to zrobić stosując poczciwego fora: np: przy konwertowaniu na mazovia itp.
Wcześniej robiłem to w c++ i nie miałem problemów.. ale teraz nie mogę sobie z tym poradzić.
Z góry wielkie dzięki za wszelką pomoc.
Czy można to zrobić w inny sposób??

Po pierwsze char z C++ i char z C# to dwa różne czary.

Po drugie przy konwersji kodowań należałoby raczej skorzystać z tablic typu byte, bo przecież tak są zapisywane znaki. Zresztą kodowanie znaków, jak sądzę, bardziej dotyczy operacji na plikach. Jeśli chcesz konwertować tekst z textboxa, który jest trzymany chyba w UTF16, to musiałbyś go najpierw skonwertować do tablicy byte, a następnie podmienić. Tzn. w ogóle nie rozumiem czemu chcesz podmieniać znaki w tekście z tekstboxa i co z nimi zrobić dalej, bo nawet jeśli wyświetlisz, to będą krzaki.

0

Celem programu jest szybka konwersja między znanymi standardami kodowań, który powinien to robić to w tzw "locie".
Chciałbym wykonać to w taki sposób: po wybraniu kontrolki z znanym kodowaniem, program skonwertował by tekst zawarty w textboxie1 lub schowku, a wynik wyświetlił w textboxie2.
Przyznaję że nie do końca przemyślałem algorytm w programie. Ale panowie nakierowaliście mnie na dobrą drogę :)

znalazłem że powinienem napisać deklarację tablic w postaci:
byte[] znaki = new byte[] { 0x26, 0x19, 0x81, 0x4E, 0xA0, 0x6D, 0x95, 0x34, 0x26, 0x75, 0x64, 0x05, 0xF6 };
a następnie

 String decoded;

        //z byte[] na string
        private void button1_Click(object sender, EventArgs e)
        {
            Byte[] bytes = new Byte[] {
             65,  83,  67,  73,  73,  32,  69,
            110,  99, 111, 100, 105, 110, 103,
             32,  69, 120,  97, 109, 112, 108, 101};
       

            ASCIIEncoding ascii = new ASCIIEncoding();
            decoded = ascii.GetString(bytes);

            textBox1.Text = decoded;
        }

Czy w dobrym kierunku idę??

0

A co z System.Text.Encoding?

0

Ba, a StreamReader/StreamWriter ? Automatyczne rozpoznawanie kodowania, kodowanie w locie ... wszystko mają.

0
adf88 napisał(a)

Automatyczne rozpoznawanie kodowania

Mógłbyś to rozwinąć? Niby jak to działa?

0

np. taki UTF-16 ma na poczatku swojego strumienia cos, cos sie zwie utf preamble - dzieki czemu rozpoznajesz czy to utf16be czy utf16le. jak sie wycfanisz, to dzieki preamble mozesz rozpoznac tez czy strumien w ogole jest utf16 :)

0

No ale nie z kazdym sie tak da. Przykladowo UTF-8 bez BOM i ANSI dla czytacza wygladaja chyba tak samo.

0

Dokładnie chodzi o automatyczne rozpoznanie bom:
http://msdn.microsoft.com/en-us/library/7bc2hwcb.aspx

1 użytkowników online, w tym zalogowanych: 0, gości: 1