将以utf8编码的字符串转换为C#中的unicode

时间:2013-07-10 08:36:23

标签: c# encoding

我从C#应用程序中的URL通过HTTP Post返回了这个字符串,其中包含一些中文字符,例如:

Gelatos® Colors Gift Set中文

问题是我想将其转换为

Gelatos® Colors Gift Set中文

两个字符串实际上是相同的,但编码方式不同。我在C#中理解一切都是UTF16。我已经尝试过阅读这里有关从一种编码转换到另一种编码但没有运气的帖子。

希望有人可以提供帮助。

这是C#代码:

WebClient wc = new WebClient();
json = wc.DownloadString("http://mysite.com/ext/export.asp");

textBox2.Text = "Receiving orders....";

//convert the string to UTF16
        Encoding ascii = Encoding.ASCII;
        Encoding unicode = Encoding.Unicode;
        Encoding utf8 = Encoding.UTF8;

        byte[] asciiBytes = ascii.GetBytes(json);
        byte[] utf8Bytes = utf8.GetBytes(json);
        byte[] unicodeBytes = Encoding.Convert(utf8, unicode, utf8Bytes);

        string sOut = unicode.GetString(unicodeBytes);

System.Windows.Forms.MessageBox.Show(sOut);  //doesn't work...

以下是服务器的代码:

<%@CodePage = 65001%>
<%option explicit%>
<%
Session.CodePage = 65001
Response.charset ="utf-8"
Session.LCID     = 1033 'en-US

.....     response.write(strJSON)

%>

网络的输出是正确的。但我只是想知道是否在http流上对C#应用程序进行了一些更改。

感谢。

2 个答案:

答案 0 :(得分:1)

首先将网页下载为字节。然后,将字节转换为正确的编码。

首先使用错误的编码转换它可能会丢失数据。特别是使用ASCII。

答案 1 :(得分:0)

如果服务器确实返回了UTF-8文本,您可以通过设置Encoding属性来配置WebClient。这将消除后续转换的任何需要。

using (WebClient wc = new WebClient())
{
    wc.Encoding = Encoding.UTF8;
    json = wc.DownloadString("http://mysite.com/ext/export.asp");
}