【问题标题】:Unicode characters on JSON string with swift 3 and AlamofireJSON字符串上的Unicode字符与swift 3和Alamofire
【发布时间】:2024-01-08 11:10:02
【问题描述】:

我正在处理这个问题。 我已经用 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: 是不够的。

标签: ios json swift swift3 alamofire


【解决方案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" : "\u{03b2}\u{03b5}\u{03b5}\u{03c1}"]

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 的答案,我得到了正确的结果。谢谢!
  • 我添加了一个例子;)