使用Fuzi解析XML时出现符号化字符问题求助
解决Fuzi解析XML时印地语乱码的问题
这个乱码问题本质是字符编码不匹配导致的——你的印地语内容是UTF-8编码,但Alamofire在解析响应字符串时用了错误的编码(比如ISO-8859-1),所以把UTF-8字节解码成了乱码符号。下面给你两种可行的解决方案:
方案1:用responseData手动解码(推荐)
直接获取响应的原始Data,然后强制用UTF-8编码转换成字符串,这样能绕开Alamofire自动编码识别的误差:
Alamofire.request("My_xml_URL").responseData { response in guard let data = response.data else { print("获取响应数据失败") return } // 强制用UTF-8解码数据 guard let xmlString = String(data: data, encoding: .utf8) else { print("UTF-8解码失败") return } guard let xml = try? XMLDocument(string: xmlString) else { return } guard let feed = xml.root else { return } for entry in feed.children(tag: "items") { let title = entry.firstChild(tag: "title")?.stringValue ?? "" print(title) // 现在应该能正确显示印地语了 } }
方案2:强制responseString用UTF-8解析
如果服务器返回的XML确实是UTF-8编码,但Content-Type头里的charset参数没正确设置,你可以直接告诉Alamofire用UTF-8来解析响应字符串:
Alamofire.request("My_xml_URL").responseString(encoding: .utf8) { response in guard let xml = try? XMLDocument(string: response.value ?? "") else { return } guard let feed = xml.root else { return } for entry in feed.children(tag: "items") { let title = entry.firstChild(tag: "title")?.stringValue ?? "" print(title) } }
问题根源说明
Alamofire的responseString方法会优先根据服务器返回的Content-Type头里的charset字段选择编码,如果服务器没指定这个字段,它会默认用ISO-8859-1解码。而你的印地语内容是UTF-8编码的,用ISO-8859-1解码就会出现那些乱码符号。
内容的提问来源于stack exchange,提问作者Asif Raza
相关产品推荐
相关产品推荐

