将UTF8转换为Windows-1252

时间:2014-10-29 17:45:00

标签: c# asp.net utf-8

我有一个asp.net GET webservice,它接受一个URL参数,运行一些逻辑,然后传回一个þ分隔的值列表。

我遇到的问题是服务请求使用Windows-1252编码,因此当þ字符返回到请求计算机时,它不能正确显示。我正在寻找一种快速的方法将字符串从UTF8转换为Windows-1252以传回。

2 个答案:

答案 0 :(得分:2)

将字符串inputStr转换为字节数组:

byte[] bytes = new byte[inputStr.Length * sizeof(char)];
System.Buffer.BlockCopy(inputStr.ToCharArray(), 0, bytes, 0, bytes.Length);

将其转换为1252:

Encoding w1252 = Encoding.GetEncoding(1252);
byte[] output = Encoding.Convert(utf8, w1252, inputStr);

取回字符串:

w1252.GetString(output);

答案 1 :(得分:0)

正如Jon Skeet已经指出的那样,字符串本身没有编码,它是具有编码的byte[]。因此,您需要知道哪些编码已应用于您的字符串,基于此,您可以检索字符串的byte[]并将其转换为所需的编码。然后可以进一步处理生成的byte[](例如,写入文件,在HttpRequest中返回,......)。

// get the correct encodings 
var srcEncoding = Encoding.UTF8; // utf-8
var destEncoding = Encoding.GetEncoding(1252); // windows-1252

// convert the source bytes to the destination bytes
var destBytes = Encoding.Convert(srcEncoding, destEncoding, srcEncoding.GetBytes(srcString));

// process the byte[]
File.WriteAllBytes("myFile", destBytes); // write it to a file OR ...
var destString = destEncoding.GetString(destBytes); // ... get the string