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