2016-07-26 67 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