Преобразование текста UTF-16 в другую кодировку (Windows-1250) - PullRequest
0 голосов
/ 25 августа 2011

У меня есть текст в переменной, text , закодированный в кодировке по умолчанию (UTF-16).Я хотел бы изменить его на Windows-1250 .У меня есть:

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;
}

, но пока это не работает.

Как мне решить эту проблему?

Я возвращаю строку в виде файла:

[...]
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();

1 Ответ

2 голосов
/ 25 августа 2011

Все строки хранятся внутри Unicode в .NET.

Вы можете преобразовать строку в поток байтов, используя кодовую страницу, как это делает ваш код. Но вы не можете изменить внутреннее представление строки: это Unicode (кодируется как UTF16), точка.

Вы можете записать свой поток закодированных байтов в файл или куда угодно. Но вы не можете изменить внутреннюю кодировку строковых объектов .NET.

Ваша функция должна возвращать byte[] вместо строки (win1250Chars на самом деле)

...