2016-07-26 65 views
-1
let result = ["response": response, 
       "callbackId": callbackId] 

do { 
    let data = try NSJSONSerialization.dataWithJSONObject(result, options: .PrettyPrinted) 
    var str = NSString(data: data, encoding: NSUTF8StringEncoding) as? String 

    str = str?.stringByReplacingOccurrencesOfString("\\", withString: "\\\\") 
    str = str?.stringByReplacingOccurrencesOfString("\"", withString: "\\\"") 
    str = str?.stringByReplacingOccurrencesOfString("\'", withString: "\\\'") 
    str = str?.stringByReplacingOccurrencesOfString("\n", withString: "\\n") 
    str = str?.stringByReplacingOccurrencesOfString("\r", withString: "\\r") 
    //       str = str?.stringByReplacingOccurrencesOfString("\f", withString: "\\f") 
    //       str = str?.stringByReplacingOccurrencesOfString("\u2028", withString: "\\u2028") 
    //   str = str?.stringByReplacingOccurrencesOfString("\u2029", withString: "\\u2029") 

    return "bridge.invokeJs('{\"response\" : {\"username\" : \"zhongan\"},\"callbackId\" : \(callbackId)}')" 
} catch { 
    return nil 
} 

我想JSON字符串轉換成JS腳本,然後調用evaluateJavaScript,但不能轉換的特殊字符,像\f\u2029,這裏會給出一個編譯器錯誤,我不不知道爲什麼。迅速如何轉換特殊的Unicode

+1

您的反斜線字符跳舞告訴我,您的源代碼首先存在一個ecoding問題,並且您應該在繼續之前修復它。 – Moritz

回答

4

看看Strings and Characters字符串文字中的特殊字符

根據此頁\f未定義。

  • 轉義特殊字符\ 0(空字符),\(反斜槓),\噸 (水平製表),\ N(換行),\ R(回車),\」(雙 引號)和\」(單引號)

  • 任意Unicode標,寫成 \∪{N},其中n是等於 一個有效的Unicode代碼的值的1-8位十六進制數點

所以,你可能在逃脫形式寫成\u{000C}

  • \u2029頁供給

    • \f進紙來轉義爲\u{2029}
    • \u2028行分隔符來轉義爲\u{2028}

    另請參閱「Unicode Control Characters