2014-12-30 4 views
0

내 앱은 무료 일기 예보 웹 서비스가이 URL에 호출 하지만이 이상한 일이지만, 반환 된 NSMutableDataNSUTF8StringEncoding을 통해 올바르게 문자열로 변환되지 않습니다. 기본적으로 개폐 XML 태그의 "<"및 ">"문자를 변환하지 못하여 "& l;"을 표시합니다. 및 "&g t;" 대신.스위프트 문자열 인코딩 및 NSXMLParser 구문 분석 문제

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> 

그래서 당신은 내가 처음 받고 있어요 볼 수

문제는 connectionDidFinishLoading 기능 것 같다 2 개의 태그가 정확하게 - "<? XML>"과 "< string xmlns>"태그가 있지만 나머지는 모두 "& lt;"으로 표시됩니다. 및 "&g t;"

정말 이상한 점은 첫 번째 태그는 encoding="utf-8"이고 두 번째 줄 (끝 부분)은 encoding="utf-16"입니다.

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

을하고는 기본적으로 나에게 중국어 찾고 문자를 주었다

그래서 나는 NSUTF16StringEncoding를 사용했습니다. (원래 문이
myXMLParser = NSXMLParser(contentsOfURL:theURL!)! 

했다

:

는 또한과 같이 반환 것 대신 NSMutableData의 URL에 직접 파서를 실행하려고

myXMLParser = NSXMLParser(data:webServiceData) 

을하지만 이들 중 어느 쪽 일

그럼 어떻게 될까요? 제대로 작동하려면 어떻게해야합니까?

답변

1

이것은 실제로 코드가 아닌 원격 서비스가 손상된 것입니다. 그렇습니다. 서버는 실제로 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; 
+0

재미 있습니다. 그리고 이상한. 그렇다면 'http : //www.webservicex.net/globalweather.asmx/GetWeather? CityName = Boston & CountryName = United + States' URL을 브라우저에 복사하여 붙여 넣으면 유효한 XML 응답을 얻을 수 있다는 사실을 어떻게 설명 할 수 있습니까? ? 그건 나에게 의미가 없다. – sirab333

+1

브라우저는 <을 <및 >>로 변환하므로 사용자가 보는 것과 실제로 반환되는 것은 다른 두 가지입니다. 그들의 웹 서비스는 솔직히 bizzare 인 '다른 XML 문서 내부에 XML 인코딩 된 문자열 반환'인 것으로 보입니다. 그러나 그것은 그것이하는 것입니다. – AlBlue