c # - Konverter UTF-16 tekst til en anden kodning (Windows-1250)

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en tekst i en variabel tekst , kodet i standardkoden (UTF-16). Jeg vil gerne ændre det til Windows-1250. Jeg har: [5]


public static string EncodeToWin1250(string text)
{
    Encoding unicode = Encoding.Unicode;
    Encoding win1250 = Encoding.GetEncoding(1250);

    byte[] unicodeBytes = unicode.GetBytes(text);
    byte[] win1250Bytes = Encoding.Convert(unicode, win1250, unicodeBytes);

    char[] win1250Chars = new char[win1250.GetCharCount(win1250Bytes, 0, win1250Bytes.Length)];
    win1250.GetChars(win1250Bytes, 0, win1250Bytes.Length, win1250Chars, 0);
    text = new string(win1250Chars);
    return text;
}


men hidtil virker det ikke.


Hvordan løser jeg dette problem?


Jeg returnerer strengen som en fil:


[...]
result = BLL.DataExchange.MoneyS3.MoneyS3Export.EncodeToWin1250(result);
Context.Response.Clear();
Context.Response.AddHeader("Content-Disposition", "attachment; filename=invoicesIssued.xml");
Context.Response.ContentType = "application/octet-stream";
Context.Response.BufferOutput = false;
Context.Response.Write(result);
Context.Response.Flush();
Context.Response.Close();

Bedste reference


Alle strenge gemmes internt som Unicode i .NET.


Du kan konvertere en streng til en byte stream ved hjælp af en kodeks, som din kode gør. Men du kan ikke ændre strengens interne repræsentation: Det er Unicode (kodet som UTF16), periode.


Du må muligvis dumpe din kodede byte strøm til en fil eller hvor du vil. Men du kan ikke ændre den interne kodning af .NET-strengobjekter.


Din funktion skal returnere en byte[] i stedet for en streng (win1250Chars faktisk)