Я извлекаю 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 взят из библиотеки SWXMLHash, что упрощает синтаксический анализ XML.
Однако при печати NSString на моей консоли отладки я замечаю, что некоторые специальные символы (испанский), такие как
'ñ' or 'é'
не декодируются должным образом.
В результате процесса декодирования вместо байтов я вижу текст. Первая строка:
<?xml version="1.0" encoding="ISO-8859-1"?>
Итак, я думаю, я выбрал правильную кодировку. Однако я не понимаю, почему некоторые символы не могут быть декодированы. Я делаю что-то не так, когда расшифровываю данные?
Странно то, что если я делаю запрос GET вручную и просматриваю файл в браузере, ошибок декодирования не возникает.
ИЗМЕНИТЬ:
Как предположил TwoStraws в своем комментарии, я сделал запрос на завивку. Он возвращает мне следующее:
HTTP/1.1 200 ОК
Кэш-Контроль: частный
Длина содержимого: 75030
Тип содержимого: текст/xml
Истекает: ср, 16 декабря 2015 г., 09:13:05 по Гринвичу.
Сервер: Microsoft-IIS/7.5
Set-Cookie: ...; путь=/
X-Powered-By: ASP.NET
Дата: среда, 16 декабря 2015 г., 09:13:05 по Гринвичу
даже если я сделаю
curl -v "http://www.example.com/webserviceGetCall"
в нем не указано, как кодируется файл xml. Что это значит? Я думал, что он также должен возвращать кодировку в описании Content-type.
curl -I "http://yoursite.com/whatever.xml"
в окне терминала, чтобы убедиться, что контент действительно отправляется в формате ISO-8859-1. XML может говорить что угодно, это просто текст. Лучше убедиться! - person TwoStraws   schedule 15.12.2015NSData
или нет. - person TwoStraws   schedule 16.12.2015