Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 500使用特定字符查询yahoo placefinder时出错?_C#_Http_Yahoo Api - Fatal编程技术网

C# 500使用特定字符查询yahoo placefinder时出错?

C# 500使用特定字符查询yahoo placefinder时出错?,c#,http,yahoo-api,C#,Http,Yahoo Api,我正在使用Yahoo Placefinder服务为csv文件中的地址列表查找纬度/经度位置 我正在使用以下代码: String reqURL = "http://where.yahooapis.com/geocode?location=" + HttpUtility.UrlEncode(location) + "&appid=KGe6P34c"; XmlDocument xml = new XmlDocument(); xml.Load(reqURL); XPathNavigator

我正在使用Yahoo Placefinder服务为csv文件中的地址列表查找纬度/经度位置

我正在使用以下代码:

String reqURL = "http://where.yahooapis.com/geocode?location=" + HttpUtility.UrlEncode(location) + "&appid=KGe6P34c";

XmlDocument xml = new XmlDocument();
xml.Load(reqURL);
XPathNavigator nav = xml.CreateNavigator();
// process xml here...
我刚刚发现了一个非常顽固的错误,我认为(错误地)这几天是由于雅虎禁止我进一步的请求

它适用于此URL:

http://where.yahooapis.com/geocode?location=31+Front+Street%2c+Sedgefield%2c+Stockton%06on-Tees%2c+England%2c+TS21+3AT&appid=KGe6P34c
我的浏览器抱怨该url的解析错误。我的c#程序说它有500个错误

此处的位置字符串来自此地址:

Agape Business Consortium Ltd.,michael.cutbill@agapesolutions.co.uk,Michael A Cutbill,Director,,,9 Jenner Drive,Victoria Gardens,,Stockton-on-Tee,,TS19 8RE,,England,85111,Hospitals,www.agapesolutions.co.uk
我认为这个错误来自t座上Stockton的第一个连字符,但我无法解释为什么会这样。如果我用一个“普通”连字符替换这个hypen,查询将成功通过

此错误是由于my end的错误(HttpUtility.UrlEncode函数不正确)还是Yahoo的end的错误

尽管我知道是什么导致了这个问题,但我不明白为什么。有人能解释一下吗

编辑:

我的进一步调查表明,此hypen编码为“%06”的字符是ascii控制字符“Acknowledge”、“ACK”。我不知道为什么这个角色会出现在这里。似乎不同的位置以不同的方式呈现T上的Stockton——它在文本编辑器中正常打开,但当它在Visual Studio中出现时,在编码之前,它是
Stockton T
。请注意,当我在firefox中将上一个复制到这个文本框中时,hypen呈现为一个奇怪的方形框字符,但在随后的编辑中,SO软件似乎已经对该字符进行了Santize处理

下面是我用来解析csv文件的function&holder类,正如您所看到的,我没有做任何可能引入意外字符的奇怪事情。危险字符出现在“城镇”字段中

公共列表解析CSV(字符串路径)
{
List parsedBusiness=new List();
List parsedBusinessNames=新列表();
尝试
{
使用(StreamReader readFile=新StreamReader(路径))
{
弦线;
字符串[]行;
bool first=true;
而((line=readFile.ReadLine())!=null)
{
如果(第一)
第一个=假;
其他的
{
行=行。拆分(',');
PaidBusiness业务=新PaidBusiness(行);
if(!business.bad)//业务的格式没有问题(没有缺少字段等)
{
如果(!parsedBusinessNames.Contains(business.CompanyName))
{
parsedBusinessNames.Add(business.CompanyName);
parsedBusiness.Add(业务);
}
}
}
}
}
}
捕获(例外e)
{  }
返回解析业务;
}
公共类付费业务
{
公共字符串公司名称、电子邮件地址、联系人全名、地址、地址2、地址3、城镇、县、邮政编码、地区、国家、业务类别、网址;
公共字符串纬度、经度;
公共福利不良;
公共静态int noCategoryCount=0;
公共静态int badCount=0;
公共付费业务(字符串[]部分)
{
坏=假;
对于(int i=0;i
欢迎使用真实世界数据。问题可能出在CSV文件中。要进行验证,请阅读该行并检查每个字符:

foreach (char c in line)
{
    Console.WriteLine("{0}, {1}", c, (int)c);
}
“普通”连字符的值为45

另一个问题可能是您正在使用错误的编码读取文件。可能是文件编码为UTF8,而您正在使用默认编码读取它。打开文件时,可以尝试指定UTF8:

using (StreamReader readFile = new StreamReader(path, Encoding.UTF8))

执行此操作,然后再次输出该行中的每个字符(如上所述),并查看您得到的连字符。

谢谢您的帮助。即使编码不同,该字符也是“6”而不是“45”。奇怪的是,这个字符最终出现在文件中,并且呈现为连字符。我现在正在将该文件作为一个read-it-in来检查任何值低于32的字符,希望我现在能够发现这些问题。
using (StreamReader readFile = new StreamReader(path, Encoding.UTF8))