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ć?
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ć?
Zmień kodowanie.
Ale gdzie? plik tekstowy mam ustawiony na UNICODE. I tam poprawnie wyświetlane są te znaki.
plik musisz przeczytac uzywajac odpowiedniego kodowania (np. jeden z konstruktorow StreamReader przyjmuje taki parametr jak encoding)
Właśnie odczytuje ten plik tak:
File.ReadAllLines(propertiesFile, Encoding.Unicode);
więc wszystko powinno śmigać.
A czy czcionka, której używasz do wyświetlania tekstu, zawiera znaki z cyrylicy?
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.
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.
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)?
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;
se.Desc = ini.Read(section, "desc"); - to jest tytuł wyświetlany
jak? bo prawdopodobnie na samym wyświetlaniu ci się krzaczy...
[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.
Pytajniki wyświetlają Ci się w konsoli czy w aplikacji okienkowej?
w aplikacji okienkowej
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.
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ć)
polskie znaki teraz też mi się nie zapisują i nie wyświetlają poprawnie.