【发布时间】:2014-07-16 12:45:56
【问题描述】:
这是我解析 JSON 的函数:
func jsonParsingWeather(urlPath:String) -> NSDictionary {
var utf8URLPath = urlPath.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)
println("URL path for JSON: \(utf8URLPath)")
var streamData:NSData = NSData(contentsOfURL: NSURL(string: utf8URLPath))
var error: NSError?
var fullWeatherDictionary: NSDictionary = NSJSONSerialization.JSONObjectWithData(streamData, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary
println("Full parsing array: \(fullWeatherDictionary)")
return fullWeatherDictionary
}
在处理西里尔字符时发现问题
urlPath = http://autocomplete.wunderground.com/aq?query=Самара
utf8URLPath = http://autocomplete.wunderground.com/aq?query=%D0%A1%D0%B0%D0%BC%D0%B0%D1%80%D0%B0
在 Safari 浏览器中,两行给出相同的结果:
{ "RESULTS": [ { "name": "Самара, Россия", "type": "city", "c": "RU", "zmw": "00000.1.28807", "tz": "Europe/Samara", "tzs": "SAMT", "l": "/q/zmw:00000.1.28807", "ll": "53.250000 50.450001", "lat": "53.250000", "lon": "50.450001" } ] }
但是!数组fullWeatherDictionary 为空!
{
RESULTS = (
);
}
为了比较,取一个拉丁字符串:
urlPath = http://autocomplete.wunderground.com/aq?query=Samara
utf8URLPath = http://autocomplete.wunderground.com/aq?query=Samara
在 Safari 浏览器中,两行给出相同的结果:
{ "RESULTS": [ { "name": "Samara, Russia", "type": "city", "c": "RU", "zmw": "00000.1.28807", "tz": "Europe/Samara", "tzs": "SAMT", "l": "/q/zmw:00000.1.28807", "ll": "53.250000 50.450001", "lat": "53.250000", "lon": "50.450001" }, { "name": "Samarate, Italy", "type": "city", "c": "IT", "zmw": "00000.101.16066", "tz": "Europe/Rome", "tzs": "CEST", "l": "/q/zmw:00000.101.16066", "ll": "45.625370 8.783435", "lat": "45.625370", "lon": "8.783435" } ...........
因此,数组fullWeatherDictionary为:
{
RESULTS = (
{
c = RU;
l = "/q/zmw:00000.1.28807";
lat = "53.250000";
ll = "53.250000 50.450001";
lon = "50.450001";
name = "Samara, Russia";
type = city;
tz = "Europe/Samara";
tzs = SAMT;
zmw = "00000.1.28807";
},
.......................
怎么了?为什么在非拉丁字符的情况下数组fullWeatherDictionary的内容不同?
【问题讨论】:
-
JSON解析的
error是什么意思? -
带有非转义西里尔字符的 URL 是什么? (我懒得全部查了)
-
带有 UTF8 的 URL
http://autocomplete.wunderground.com/aq?query=%D0%A1%D0%B0%D0%BC%D0%B0%D1%80%D0%B0等于带有非转义西里尔字符的 URLhttp://autocomplete.wunderground.com/aq?query=Самара(Самара- 是带有西里尔字符的俄语单词)
标签: utf-8 swift ios8 nsjsonserialization