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的主要内容,如果未能解决你的问题,请参考以下文章

使用Swift来取消unicode字符,即 u1234

如何在 Swift 中打印 Unicode 字符

字符串文字中的 Swift 特殊 Unicode 字符

如何从 Swift 3 上的响应字符串中检索标题字段?

Unicode与编码方式

Python2与python3中字符串的区别