JSON字符串上的Unicode字符与swift 3和Alamofire
Posted
技术标签:
【中文标题】JSON字符串上的Unicode字符与swift 3和Alamofire【英文标题】:Unicode characters on JSON string with swift 3 and Alamofire 【发布时间】:2017-01-18 16:24:39 【问题描述】:我正在处理这个问题。
我已经用 alamofire 提出了一个 json 请求,在我的 json 中有一些字符,如 u00b
等。这是希腊语。
虽然当我打印字典时,我看不到正确的字符串,如“αβγ”,但它们的 unicode 字符。
使用 alamofire 将我得到的所有文本统一编码为 utf-8 以便我可以打印出正确的字符的正确方法是什么??
以下代码是我提出的请求。
func getManPerf()
Alamofire.request(baseurl, method: .get, parameters: ["action": "categories", "subaction": "getproducts", "category_id": "11", "limit": "0,30"]).responseJSON (responseData) -> Void in
if((responseData.result.value) != nil)
let result = responseData.result
print(result)
if let dict = result.value as? Dictionary<String, AnyObject>
if let list = dict["products_in_category"] as? [Dictionary<String, AnyObject>]
for obj in list
let manPerfumes = Products(productDict: obj)
self.manPerfumeData.append(manPerfumes)
DispatchQueue.main.async
self.manPerfumeCV.reloadData()
我必须对我的代码进行哪些更改才能为我带来正确的数据?谢谢!
【问题讨论】:
打印dict
而不是result
。字典中的 UTF8 字符是正确的。
@vadian 是的,我还打印了dict
,我看到了u00b
之类的字符。
这只是打印到控制台的表示。将字符串值分配给标签,然后您将看到正确的字符。
@vadian 问题是我得到了一些网址,我正在尝试下载图像。并且任何具有这些类型字符的链接都不会下载图像。
您需要对 URL 进行相应的转义/百分比编码。 URL(string:
是不够的。
【参考方案1】:
在附加之前使用 UTF-8 格式化字符串 ;)
let manPerfumesUTF = String(UTF8String: manPerfumes.cStringUsingEncoding(NSUTF8StringEncoding))
游乐场示例:
class Products
let _name : String
init(productDict : [String : String])
self._name = productDict["name"] ?? "error"
let productDict = ["name" : "Hugo Boss"]
let productDictWithUTF8 = ["name" : "\u03b2\u03b5\u03b5\u03c1"]
let hugoBoss = Products(productDict: productDict)
let greekParfume = Products(productDict: productDictWithUTF8)
print(hugoBoss._name) // Hugo Boss
print(greekParfume._name) // βεερ
【讨论】:
有一个错误,Value of type Products has no member of cStringUsingEncoding
和 products 是我的模型类。
抱歉,我读错了代码。在 Products 类的 init 函数中。您必须更改要使用 UTF-8 显示的字符串。例如:' if let productName = productDict["product_name"] self.productName = String(UTF8String: productName.cStringUsingEncoding(NSUTF8StringEncoding)) '
在 swift 3 中,这是我的产品名称代码,例如 ` if let productName = productDict["name"] as? String self._name = productName ` 我正试图举出你的例子,但我得到一个错误
结合@vadian 的答案,我得到了正确的结果。谢谢!
我添加了一个例子;)以上是关于JSON字符串上的Unicode字符与swift 3和Alamofire的主要内容,如果未能解决你的问题,请参考以下文章