我已经构建了一个小程序,用于从Google Maps API地理编码服务读取XML输出,并使用LINQ to XML解析字符串。
如果返回的XML包含非ASCII字符,那么我的输出似乎会中断。有没有办法以不同的方式读取/编码?
以下是代码关键部分的快照。
public static void Read(IList<string> LocationDetails, string Type)
{
using (WebClient webClient = new WebClient())
{
webClient.Proxy = null;
for(int i = 0; i < 5; i++)
{
//Generate geocode request and read XML file to string
string request = String.Format("Https://maps.google.com/maps/api/geocode/xml?{0}={1}&sensor=false", Type, LocationDetails[i]);
string locationXML = webClient.DownloadString(request);
XElement root = XElement.Parse(locationXML);
//Check if request is OK or otherwise
if (root.Element("status").Value != "OK")
{ //Skip to next iteration if status not OK
continue;
}
}
.....跳过一些声明代码。 StateName声明为字符串。
try
{
StateName = (result.Elements("address_component")
.Where(x => (string)x.Element("type") == "administrative_area_level_1")
.Select(x => x.Element("long_name").Value).First());
}
catch (InvalidOperationException e)
{
StateName = null;
}
答案 0 :(得分:3)
我相信Google网络服务将返回使用UTF-8编码的XML。但是,如果HTTP标头中不存在此信息,WebClient.DownloadString
方法将使用Encoding.Default
将返回的字节解码为字符串。这也称为“ANSI”编码,在大多数情况下不是UTF-8。
要解决此问题,您需要在致电webclient.DownloadString(request)
之前执行以下任务:
webClient.Encoding = Encoding.UTF8;