2015-01-10 135 views
1

我真的得到XML值,从一家俄罗斯银行的Web服务读取XML时(来源:http://www.cbr.ru/scripts/XML_daily.asp编码问题从俄罗斯网站

我的ASP.NET代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication4.WebForm1" CodePage="65001" %> 

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> 
    <title></title> 
</head> 
<body> 
<form id="form1" runat="server"> 
<asp:GridView ID="volutes" runat="server" > 
<HeaderStyle BackColor="#df5015" Font-Bold="true" ForeColor="White" /> 
</asp:GridView> 
</form> 
</body> 
</html> 

我的C#代码:

  DataTable dt = new DataTable(); 
      WebClient client = new WebClient(); 
      Stream stream = client.OpenRead("http://www.cbr.ru/scripts/XML_daily.asp"); 
      StreamReader reader = new StreamReader(stream); 
      String content = reader.ReadToEnd(); 
      XmlDocument xml = new XmlDocument(); 
      xml.LoadXml(content); 


      dt.Columns.Add("Name", typeof(string)); 
      dt.Columns.Add("Value", typeof(string)); 
      XmlNodeList nodeList = xml.SelectNodes("/ValCurs/Valute"); 
      foreach (XmlNode node in nodeList) 
      { 
       DataRow dtrow = dt.NewRow(); 
       dtrow["Name"] = node["Name"].InnerText; 
       dtrow["Value"] = node["Value"].InnerText; 
       dt.Rows.Add(dtrow); 
      } 
      volutes.DataSource = dt; 
      volutes.DataBind(); 

Оn结果页面本身我真的e:

Name         Value 
������������� ������ 46,0642 

为什么?

+0

检查,如果该名'字符串content'内正确显示 – Banana

回答

5

你应该用正确的编码为您StreamReader并通过,在constructor,否则读者会默认使用UTF-16 LE:

using (StreamReader reader = new StreamReader(stream 
              , Encoding.GetEncoding("windows-1251") 
              ) 
    ) 
{ 
}