1

XML アプリでネットワーク経由で XML ファイルを取得しています。ファイルは ISO-8859-1 を使用してエンコードする必要があることを知っています。

だから私はそれを引っ張るときにそれをデコードしようとします:

func extractXMLFromHttpResponse(data: NSData) -> XMLIndexer {

    let xmlContent = NSString(data: data, encoding: NSISOLatin1StringEncoding)!

    print(xmlContent)
    return SWXMLHash.parse(xmlContent as String) 
}

注: XMLIndexer は、 XML の解析を容易にするSWXMLHash ライブラリからのものです。

ただし、NSString をデバッグ コンソールに出力すると、次のような特殊文字 (スペイン語) が表示されることに気付きました。

「ニ」または「エ」

正しくデコードされません。

デコード プロセスの結果、バイトではなくテキストが表示されます。最初の行は次のとおりです。

<?xml version="1.0" encoding="ISO-8859-1"?>

だから、私は正しいエンコーディングを選択したと思います。ただし、一部の文字をデコードできない理由がわかりません。データをデコードするときに何か間違ったことをしていますか?

奇妙なことに、手動で GET リクエストを実行してブラウザでファイルを表示すると、デコード エラーが発生しません。

編集:

TwoStraws がコメントで示唆したように、curl リクエストを行いました。それは私に次を返します:

HTTP/1.1 200 OK

キャッシュ制御: プライベート

コンテンツの長さ: 75030

コンテンツ タイプ: テキスト/xml

有効期限: 2015 年 12 月 16 日水曜日 09:13:05 GMT

サーバー: Microsoft-IIS/7.5

セット Cookie: ...; パス=/

X-Powered-By: ASP.NET

日付: 2015 年 12 月 16 日水曜日 09:13:05 GMT

たとえ私がそうしても

curl -v "http://www.example.com/webserviceGetCall"

xml ファイルがどのようにエンコードされているかは記載されていません。どういう意味ですか?Content-type の説明でエンコーディングも返すべきだと思いました。

4

1 に答える 1

1

そのため、いくつかの診断により、サーバーが 1 つの文字セット エンコーディングを示し、XML が別の文字セットを示しており、iOS がこれを調整するのに苦労していることが問題であることがわかりました。

最終的に使用したソリューションは次のとおりです。

if let url = NSURL(string: "http://example.com/path/to/xml/file") {
    do {
        let str = try NSString(contentsOfURL: url, encoding: NSISOLatin1StringEncoding)
        print(str)
    } catch let e as NSError {
        print(e.localizedDescription)
    }
}

…そしてそれはうまくいきました。これはちょっとしたケースですが、うまくいけば、これは同じ問題にぶつかる他の貧しい魂を助けるでしょう.

于 2015-12-16T11:35:56.320 に答える