Odczytywanie orsyjskich znaków z pliku

0

Witam,

mam następujący problem. Program poprawnie odczytuje rosyjskie znaki z bazy. Również poprawnie zapisuje je do pliku tekstowego. Problem pojawia się kiedy chcę odczytać plik tekstowy. Wtedy pojawiają się pytajniki. Jak temu zaradzić?

1

Zmień kodowanie.

0

Ale gdzie? plik tekstowy mam ustawiony na UNICODE. I tam poprawnie wyświetlane są te znaki.

0

plik musisz przeczytac uzywajac odpowiedniego kodowania (np. jeden z konstruktorow StreamReader przyjmuje taki parametr jak encoding)

0

Właśnie odczytuje ten plik tak:

File.ReadAllLines(propertiesFile, Encoding.Unicode);

więc wszystko powinno śmigać.

0

A czy czcionka, której używasz do wyświetlania tekstu, zawiera znaki z cyrylicy?

0

Unicode to tylko ogólna nazwa kodowania, na który składają się wersje - jak UTF-8, UTF-16, UTF-32..

Encoding.Unicode Property
Gets an encoding for the UTF-16 format using the little endian byte order.

Widocznie twój plik jest zapisany w innym, zapewne UTF-8. Użyj zatem Encoding.UTF8.

0

zmieniłem zapisywanie do pliku z Unicode na UTF8. W odczycie również wpisałem jak napisałeś UTF8. Teraz w pliku tekstowym znaki nadal są wyświetlane poprawnie, ale w aplikacji nie. Zamiast pytajników są krzaczki. Co z tym fantem? niem am już pomysłów.

1

Są miliony możliwości... Daj może kod na wczytywanie, zapisywanie i wyświetlanie tekstu (gdybyś to zrobił od razu byłoby szybciej i bez zgadywania)?

0
   string txt = File.ReadAllText(fullpath, Encoding.UTF8);

            #region Find all words within square brackets

            List<string> listSections = new List<string>();

            for (int i = 0; i < txt.Length; i++)
            {
                int a = txt.IndexOf('[', i);
                if (a == -1) break;
                int b = txt.IndexOf(']', i + 1);
                if (b == -1) break;
                listSections.Add(txt.Substring(a + 1, b - a - 1));
                i = b;
            }

            #endregion

            bool wasAlarmLoaded = false;
            Ini.IniFile ini = new Ini.IniFile(fullpath);

            



            //Parse ini file
            for (int i = 0; i < listSections.Count; i++)
            {
                string section = listSections[i].ToLower();
                SerializableElement se = new SerializableElement();

                //if (section.Contains("config"))
                //{

                //}

                if (section.Contains("strzalka"))
                {
                    #region Arrows (type 1 and 2)

                    try
                    {

                        if (int.TryParse(ini.Read(section, "id"), out se.Id) == false) se.Id = -1;
                        if (Array.IndexOf(arrTransporterIDs, se.Id) == -1) continue;                //skip conveyors with improper ids

                        if (int.TryParse(ini.Read(section, "type"), out se.Type) == false || (se.Type != 1 && se.Type != 2)) continue;
                        if (int.TryParse(ini.Read(section, "x"), out se.X) == false) continue;
                        if (int.TryParse(ini.Read(section, "y"), out se.Y) == false) continue;
                        if (int.TryParse(ini.Read(section, "angle"), out se.Angle) == false) continue;
                        if (int.TryParse(ini.Read(section, "length"), out se.Length) == false || se.Length < 0) continue;
                        string s = ini.Read(section, "ugs"); if (s != "true") se.ugs = false; else se.ugs = true;
                        se.Desc = ini.Read(section, "desc");

se.Desc = ini.Read(section, "desc"); - to jest tytuł wyświetlany

zapis:

 
StreamWriter wr = new StreamWriter(fullpath, false, Encoding.UTF8);

...

 case 7:
                        cntComments++;
                        wr.WriteLine();
                        wr.WriteLine("[tekst" + AddLeadingZeros(cntComments) + "]");

                        wr.WriteLine("type=" + e.Type.ToString());
                        wr.WriteLine("x=" + e.X.ToString());
                        wr.WriteLine("y=" + e.Y.ToString());
                        wr.WriteLine("txt=" + e.desc);
                        wr.WriteLine("bold=" + (e.txtBold == true ? "true" : "false"));
                        wr.WriteLine("font_type=" + (e.txtFontType == "Arial" ? "Arial" : "Verdana"));
                        wr.WriteLine("font_size=" + e.txtFontSize.ToString());
                        wr.WriteLine("color=" + e.txtColor.R.ToString() + "," + e.txtColor.G.ToString() + "," + e.txtColor.B.ToString());
                        break;

...


                        wr.WriteLine("id=" + e.id.ToString());
                        wr.WriteLine("type=" + e.Type.ToString());
                        wr.WriteLine("x=" + e.X.ToString());
                        a = e.Y - 10; wr.WriteLine("y=" + a.ToString());
                        wr.WriteLine("angle=" + e.Angle.ToString());
                        wr.WriteLine("length=" + e.Length.ToString());
                        wr.WriteLine("ugs=" + (e.ugs == true ? "true" : "false"));
                        wr.WriteLine("desc=" + e.desc);
                        a = e.ofx + 20; wr.WriteLine("ofx=" + a.ToString());
                        a = e.ofy + 20; wr.WriteLine("ofy=" + a.ToString());
                        wr.WriteLine("blp=" + e.blp.ToString());
                        wr.WriteLine("bln=" + e.bln.ToString());
                        break;
0

se.Desc = ini.Read(section, "desc"); - to jest tytuł wyświetlany
jak? bo prawdopodobnie na samym wyświetlaniu ci się krzaczy...

0

[URL=http://img38.imageshack.us/i/krzaczki.jpg/][IMG]http://img38.imageshack.us/img38/2104/krzaczki.jpg[/IMG][/URL]

Takie coś. Jak widać to co wprowadzone jest w programie wyświetla się poprawnie.

0

Pytajniki wyświetlają Ci się w konsoli czy w aplikacji okienkowej?

0

w aplikacji okienkowej

0

Takie coś. Jak widać to co wprowadzone jest w programie wyświetla się poprawnie.

Nie chodzi o to jak to wygląda, tylko jakim poleceniem to wyświetlasz...

Bo wygląda to na kod UTF-8 wyświetlany jako ANSI.

0

jak mam wklepane np w label ten tekst to wyświetla się OK. Przy odczycie z pliku jest źle. W odczycie z bazy jest ok (nie musiałem nic zmieniać)

0

polskie znaki teraz też mi się nie zapisują i nie wyświetlają poprawnie.

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