C# Varför byts vissa tecken ut?

Permalänk
Medlem

C# Varför byts vissa tecken ut?

Jag använder mig av en richtextbox till ett program, men alla "™" och "œ" tecken byts ut till "�" i mitt Windows Form Application.

Kika på denna koden lite.
string Chosen_File = hetmapp + "\\" + "adresser.txt";

if (System.IO.File.Exists(Chosen_File) == true)

{
System.IO.StreamReader objReader;
objReader = new System.IO.StreamReader(Chosen_File);

textbox1.Text = objReader.ReadToEnd();

textbox1.Text = textbox1.Text.Replace("Ö", ">");
textbox1.Text = textbox1.Text.Replace("@", "Ö");
textbox1.Text = textbox1.Text.Replace("Ã", "@");
textbox1.Text = textbox1.Text.Replace("™", "@");
textbox1.Text = textbox1.Text.Replace("\"", "");
textbox1.Text = textbox1.Text.Replace("£", "Å");
textbox1.Text = textbox1.Text.Replace("#", "Ä");
textbox1.Text = textbox1.Text.Replace("$", "Å");
textbox1.Text = textbox1.Text.Replace("œ", "Å");
textbox1.Text = textbox1.Text.Replace("\\", "É");

objReader.Close();

}

Jag har inga problem med att kopiera in texten med dessa tecken. Men när man kör "öppna" funktionen förvandlas "™" och "œ" till "�". Hur kommer det sig?

Visa signatur

ASUS X99 Deluxe II | Intel i7 6850K 3.6 GHz | 2 x GTX 1080 Strix | 4 x Corsair 8 GB DDR4 3000 MHz CL15 Vengeance | Samsung 850 Evo 500 GB | OCZ Vertex 4 128 GB | Western Digital 2 TB

Permalänk
Medlem

Det är ett encodingproblem helt klart. Testa att läsa in filen med File.ReadAllText(hetmapp + "\\" + "adresser.txt"); istället.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Hedersmedlem

Någon kommer antagligen med ett bättre svar senare (mitt är inte specifikt för C#), men det lär bero på att källkoden sparas i fel teckenencoding. En gissning är att det hjälpa med att se till att filen sparas som UTF-8, men jag har inte rört C# på c:a 5 år.

Visa signatur

Asus B550M-Plus / Ryzen 5800X / 48 GB 3200 MHz CL14 / Asus TUF 3080 OC / WD SN850 1 TB, Kingston NV1 2 TB + HDDs / Corsair RM650x / Acer XB271HU (1440p165) / LG C1 55"
Mobil: Moto G200

Permalänk
Medlem

Jag löste det. Gjorde såhär istället:

if (System.IO.File.Exists(Chosen_File) == true)
{
textbox1.Clear();
StreamReader reader = new StreamReader(Chosen_File, System.Text.Encoding.Default);
try
{
string thestring = reader.ReadToEnd();
textbox1.AppendText(thestring);
}

finally
{
textbox1.Text = textbox1.Text.Replace("@", "Ö");
textbox1.Text = textbox1.Text.Replace("™", "@");
textbox1.Text = textbox1.Text.Replace("Ã", "@");
textbox1.Text = textbox1.Text.Replace("\"", "");
textbox1.Text = textbox1.Text.Replace("£", "Å");
textbox1.Text = textbox1.Text.Replace("#", "Ä");
textbox1.Text = textbox1.Text.Replace("$", "Å");
textbox1.Text = textbox1.Text.Replace("œ", "Å");
textbox1.Text = textbox1.Text.Replace("\\", "É");
reader.Close();
}

Funkar finfint nu
Tack ändå

Visa signatur

ASUS X99 Deluxe II | Intel i7 6850K 3.6 GHz | 2 x GTX 1080 Strix | 4 x Corsair 8 GB DDR4 3000 MHz CL15 Vengeance | Samsung 850 Evo 500 GB | OCZ Vertex 4 128 GB | Western Digital 2 TB