Kodowanie pliku tekstowego

0

Witam
Próbuję ostatnio stworzyć program do parsowania billingów. Problem w tym, że nie jestem w stanie poprawnie zdekodować pliku w C#. Plik (dołączony jako source.txt) generowany jest przez dosyć stary program dosowy. Z tego co udało mi się ustawić w opcjach eksportu to powinien mieć on kodowanie Latin-2. Jeżeli zastosuję poniższy kawałek kodu to w miejscach linii oraz polskich znaków dostaję pytajniki. Jeżeli ten sam plik otworzę w Notepad++ i ustawię charset OEM 852 to dostaję pożądany wynik (tak jak w pliku result.jpg). Czy ktoś mógłby mnie naprowadzić, gdzie robię błąd?

 
            StreamReader fileReader = new StreamReader("E:\\33.TRF");

            for(int i =0 ; i < 30; i++)
            {
                // Read single line
                string singleLine = fileReader.ReadLine();

                // Applay proper encoding
                Encoding cp852Encoding = Encoding.GetEncoding("ibm852");
                byte[] singleLineBytes = cp852Encoding.GetBytes(singleLine);
                string decodedLine = Encoding.UTF8.GetString(Encoding.Convert(cp852Encoding, Encoding.UTF8, singleLineBytes));
                richTextBox1.AppendText(decodedLine);
                richTextBox1.AppendText("\n");
2
string[] lines = File.ReadAllLines(@"c:\source.txt", Encoding.GetEncoding(852));

Albo ReadAllText jeśli chcesz mieć jednego długiego stringa zamiast tablicy.

A w twoim kodzie:

  1. otwierasz plik tak jakby był w CP1250 i kowertujesz do UTF-16
  2. konwertujesz otrzymany UTF-16 na CP852
  3. konwertujesz otrzymane CP852 na UTF-8
  4. konwertujesz UTF-8 na UTF-16

co, po usunięciu kroków nieszkodliwych, sprowadza się do

• otwierasz plik jako CP1250 i dopiero konwertujesz do CP852.

0

Faktycznie. Dzięki za pomoc. Wiedziałem, że gdzieś się z tym zamotałem.

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