gpt4 book ai didi

string - Swift String 编码和 NSXMLParser 解析问题

转载 作者:行者123 更新时间:2023-11-30 10:19:46 25 4
gpt4 key购买 nike

我的应用程序正在调用以下 URL 中的免费天气预报 Web 服务: http://www.webservicex.net/globalweather.asmx/GetWeather?CityName=Boston&CountryName=United+States

我使用的是通常的NSURLConnectionNSXMLParser委托(delegate)方法来解析传入的数据(我之前已经这样做了一百万次),但很奇怪的是, NSMutableData返回的内容未通过 NSUTF8StringEncoding 正确转换为字符串。它基本上无法转换开始和结束 XML 标记的“<”和“">”字符,给了我“<”和“&g t;”反而。

问题似乎出在 connectionDidFinishLoading功能:

func connection(connection: NSURLConnection, didReceiveData data: NSData) {        
webServiceData!.appendData(data)
}

func connectionDidFinishLoading(connection: NSURLConnection) {
let XMLResponseString = NSString(data: webServiceData!, encoding: NSUTF8StringEncoding)!
println("XMLResponseString = \(XMLResponseString)")
}

我从 println 得到的输出声明有:

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://www.webserviceX.NET">&lt;?xml version="1.0" encoding="utf-16"?&gt;
&lt;CurrentWeather&gt;
&lt;Location&gt;DALLAS EXECUTIVE AIRPORT, TX, United States (KRBD) 32-41N 096-52W 203M&lt;/Location&gt;
&lt;Time&gt;Dec 30, 2014 - 08:53 AM EST / 2014.12.30 1353 UTC&lt;/Time&gt;
&lt;Wind&gt; from the NE (050 degrees) at 12 MPH (10 KT):0&lt;/Wind&gt;
&lt;Visibility&gt; 9 mile(s):0&lt;/Visibility&gt;
&lt;SkyConditions&gt; overcast&lt;/SkyConditions&gt;
&lt;Temperature&gt; 39.9 F (4.4 C)&lt;/Temperature&gt;
&lt;DewPoint&gt; 34.0 F (1.1 C)&lt;/DewPoint&gt;
&lt;RelativeHumidity&gt; 79%&lt;/RelativeHumidity&gt;
&lt;Pressure&gt; 30.42 in. Hg (1030 hPa)&lt;/Pressure&gt;
&lt;Status&gt;Success&lt;/Status&gt;
&lt;/CurrentWeather&gt;</string>

正如你所看到的,我正确地获取了前 2 个标签 - “< ?XML >” 和 “< string xmlns >” 标签,但其余的都显示为 “& l t;”和“&g t;”

真正奇怪的是它说encoding="utf-8"对于第一个标签,但在第二行(接近结尾)它说 encoding="utf-16" .

所以我尝试使用 NSUTF16StringEncoding :

let XMLResponseString = NSString(data: webServiceData!, encoding: NSUTF16StringEncoding)!

这基本上给了我看起来像中国人的角色。

我还尝试直接在 url 上运行解析器,而不是返回的 NSMutableData,如下所示:

    myXMLParser = NSXMLParser(contentsOfURL:theURL!)!

(原文是这样的:

    myXMLParser = NSXMLParser(data:webServiceData)

但是这些都不起作用。

那么这是怎么回事?关于如何使其正常工作有什么建议吗?

最佳答案

这实际上是远程服务被破坏,而不是您的代码。是的,服务器确实在 XML 中发送 XML,没有什么特别好的理由。

$ curl 'http://www.webservicex.net/globalweather.asmx/GetWeather?CityName=Boston&CountryName=United+States'

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://www.webserviceX.NET">&lt;?xml version="1.0" encoding="utf-16"?&gt;
&lt;CurrentWeather&gt;
&lt;Location&gt;BOSTON LOGAN INTERNATIONAL, MA, United States (KBOS) 42-22N 071-01W 54M&lt;/Location&gt;

关于string - Swift String 编码和 NSXMLParser 解析问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27707865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com