我在变量 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();
答案 0 :(得分:2)
所有字符串都在.NET内部存储为Unicode。
您可以使用代码页将字符串转换为字节流,就像您的代码一样。但是你不能改变字符串的内部表示:它是Unicode(编码为UTF16),句点。
您可以将编码的字节流转储到文件或任何您想要的位置。但是您无法更改.NET字符串对象的内部编码。
您的函数应返回byte[]
而不是字符串(实际为win1250Chars
)