将UTF-16文本转换为另一种编码(Windows-1250)



我在变量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();

所有字符串在。net内部作为Unicode存储。

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

您可以将编码的字节流转储到文件或任何您想要的地方。但是你不能改变。net字符串对象的内部编码。

你的函数应该返回一个byte[]而不是一个字符串(实际上是win1250Chars)