Строка ответов изменена после обновления Alamofire с 5.0 на 5.3

#ios #alamofire

#iOS #alamofire

Вопрос:

JSON, который я получил:

 {
    "buyer": {
        "tmallMemberLevel": 0
    },
    "consumerProtection": {
        "items": [{
            "desc": "ÕýÆ·±£ÕÏ£¬¼ÙÒ»ÅâËÄ",
            "title": "¼ÙÒ»ÅâËÄ",
            "type": 0
        }, {
            "desc": "³ÏÐÅÓû§ÔÚÍË»õ¼Ä³öºó£¬ÏíÊܼ«ËÙÍË¿îµ½ÕË",
            "title": "¼«ËÙÍË¿î",
            "type": 0
        }, {
            "desc": "Âú×ãÏàÓ¦Ìõ¼þʱ£¬Ïû·ÑÕß¿ÉÉêÇë ¡°ÆßÌìÎÞÀíÓÉÍË»»»õ¡±",
            "title": "ÆßÌìÎÞÀíÓÉÍË»»",
            "type": 0
        }]
    }
}
 

С Alamofire 5.0 responseString:

 {"buyer":{"tmallMemberLevel":0},"consumerProtection":{"items":[{"desc":"正品保障,假一赔四","title":"假一赔四","type":0},{"desc":"诚信用户在退货寄出后,享受极速退款到账","title":"极速退款","type":0},{"desc":"满足相应条件时,消费者可申请 “七天无理由退换货”","title":"七天无理由退换"
 

Китайский язык отображается правильно.

Однако в Alamofire 5.3 строка ответов:

 {"buyer":{"tmallMemberLevel":0},"consumerProtection":{"items":[{"desc":"ÕýÆ·±£ÕÏ£¬¼ÙÒ»ÅâËÄ","title":"¼ÙÒ»ÅâËÄ","type":0},{"desc":"³ÏÐÅÓû§ÔÚÍË»õ¼Ä³öºó£¬ÏíÊܼ«ËÙÍË¿îµ½ÕË","title":"¼«ËÙÍË¿î","type":0},{"desc":"Âú×ãÏàÓ¦Ìõ¼þʱ£¬Ïû·ÑÕß¿ÉÉêÇë ¡°ÆßÌìÎÞÀíÓÉÍË»»»õ¡±"
 

Китайский язык меняется на беспорядочный код.

Как это решить?

Ответ №1:

Используйте кодировку GBK для строки ответа:

 extension String.Encoding {
    
    public static var GB_18030_2000: String.Encoding {
        let cfEncoding = CFStringEncodings.GB_18030_2000
        let resEncoding = CFStringConvertEncodingToNSStringEncoding(CFStringEncoding(cfEncoding.rawValue))
        return String.Encoding(rawValue: resEncoding)
    }
    
}