Detta är kanske en lite konstig förfrågan, men jag behöver "förstöra" en Unicodesträng, eller rättare sagt byta ut svenska och andra internationella tecken. Nae, då kommer ju "åäö" rätt med, och då får det mottagande programmet problem (åäö försvinner bara helt sonika när programmet "tolkat" innehållet). Det är det som är det lustiga - den vill ha UTF-8. Men kruxet är att den vill ha strängen som om den inte vore det. >Om man t ex öppnar en fil sparad i UTF-8-format i valfri texteditor (Crimson Editor, EditPlus och såna Nej, jag tror jag förstår, det är därför jag skriver "korrupta" "konvertera", "dekoda" (med citattecken) o s v, jag är ju inte riktigt säker på vad det jag vill uppnå är :/ (kan bara säga exakt vad jag vill effekten ska vara). Du får nog göra det i två steg om jag förstått dig rätt. Först koda din unicode-sträng till t.ex. latin-1 (iso-8859-1) och sedan koda dessa bytes som UTF-8. Mottagande system måste ju rimligen använda någon encoding som existerar. Byta encoding på en sträng
Jag ska nämligen skriva den till en fil, som sedan en extern applikation (utanför min kontroll) kommer att "dekoda" den rätt.
Jag utgår givetvis från en vanlig C#-sträng (UTF-16?) som har åäö o s v. Jag vill sen att strängen ska bli som om man tittar på en UTF-8 sträng med en enklare teckentabell (typ Amerikansk Windows ANSI?), det vill säga "ä" ska bli "ä", "ö" ska bli "ö" och så vidare, innan jag skriver ner den.
Hur gör jag detta (utan att använda Replace...)?
Jag har gjort om strängen till en byte[] och därefter gjort Encoding.Convert på den till Encoding.ASCII, men då blir ju alla tecken utanför ASCII-rymden bara "?"Sv:Byta encoding på en sträng
Sv:Byta encoding på en sträng
Om man t ex öppnar en fil sparad i UTF-8-format i valfri texteditor (Crimson Editor, EditPlus och såna där) som UTF-8 visas ju allt korrekt. Öppnar jag den däremot som "Plain text" blir ju åäö och andra liknande tecken "korrupta". De "konverteras" till två tecken, Ã och ett till.
Det externa programmet tar emot strängen och "antar" på något sätt att strängen är UTF-8 som har blivit korrupt och gör därför en omvänd tolkning (precis som texteditorn gör om man väljer att byta tillbaka Encodingen till UTF-8) och byter ut tecknen mot sina riktiga. Skickar jag in åöö direkt blir denna avkodning misslyckad och alla internationella tecken försvinner bara från texten. Därför behöver jag först "nedgradera" strängen.
Jag _gissar_ att det i .NET skulle funka att först konvertera min sträng till en byte[] och sen med hjälp av en passande System.Text.Encoding göra den till en sträng igen. Problemet är att jag inte vet vilken.Sv: Byta encoding på en sträng
>där) som UTF-8 visas ju allt korrekt. Öppnar jag den däremot som "Plain text" blir ju åäö och andra
>liknande tecken "korrupta". De "konverteras" till två tecken, Ã och ett till.
Du har nog missuppfattat hur UTF-8 fungerar. Alla tecken med unicode > 127 använder flera bytes så det sker ingen konvertering.Sv:Byta encoding på en sträng
Sv: Byta encoding på en sträng
Sv: Byta encoding på en sträng
Det där med "felaktig UTF-8" låter som en missuppfattning från något håll.
Troligen är det en annan encoding, t.ex. ascii codepage 850 nordic som används.
Den finns som System.Text.Encoding.GetEncoding(850). Alltså prova att skriva filen så.