如何在swift 3/4中utf-8解码jsonfile

时间:2017-10-13 15:21:34

标签: json swift encoding

我一直在尝试用Xcode Swift 3和4中的丹麦字母解码json文件很长时间。只要它不需要阅读å,ø,å等丹麦字母,它就可以正常工作。 这是我的代码:

    let myFile = Bundle.main.path(forResource: fileName, ofType: "json")
    let url = URL(fileURLWithPath: myFile!)
    let data = try! Data(contentsOf: url)
    let json = try! JSONSerialization.jsonObject(with: data)

我可以像这样从文件中提取数据

let navn = JSON(json)["navn"].string!

但是......如果我的文件包含类似

的内容
"navn":"Gentofte Sø"

应用程序因“ø”而崩溃。 我知道它应该是utf8解码的,但我似乎无法弄清楚如何做到这一点,因为到目前为止我看到的所有示例都是来自url的数据,og是字符串格式的虚拟数据。

1 个答案:

答案 0 :(得分:0)

我不得不说我正在使用firebase数据库,因此,在这种情况下我找到了这样的解决方案

  if let path = Bundle.main.url(forResource: fileName, withExtension: "json") {
        do {
                 let jsonData = try Data(contentsOf: path, options: .mappedIfSafe)
            do {
                 let responseStrInmacOSRoman = String(data: jsonData, encoding: String.Encoding.macOSRoman)

                guard let modifiedDataInUTF8Format = responseStrInmacOSRoman?.data(using: String.Encoding.utf16) else {
                    print("could not convert data to UTF-8 format")
                    return
                }


                if let jsonResult = try JSONSerialization.jsonObject(with: modifiedDataInUTF8Format, options: JSONSerialization.ReadingOptions(rawValue: 0)) as? NSDictionary {
                    do {
                    if let gpsMapped = jsonResult.value(forKey: "gpsmapped") as? String {
                        ref?.child("myFirstChild").child(fileName).child("mySecondchild").setValue(gpsMapped)
                        alData += "," + gpsMapped
                        print(gpsMapped)
                    }
        }
            } catch {}

            }
        catch{}
        }