将UTF-16文本转换为其他编码(Windows-1250)

时间:2011-08-25 14:46:25

标签: c# windows encoding utf-8 utf-16

我在变量 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 个答案:

答案 0 :(得分:2)

所有字符串都在.NET内部存储为Unicode。

您可以使用代码页将字符串转换为字节流,就像您的代码一样。但是你不能改变字符串的内部表示:它是Unicode(编码为UTF16),句点。

您可以将编码的字节流转储到文件或任何您想要的位置。但是您无法更改.NET字符串对象的内部编码。

您的函数应返回byte[]而不是字符串(实际为win1250Chars