2016-07-26 3 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, это даст ошибку компиляции, и я не» Знаю почему.быстро, как преобразовать специальный Юникод

+1

Ваш танец с символами обратной косой черты говорит мне, что у вас есть проблема с кодировкой с исходным кодом, и вы должны исправить ее, прежде чем идти дальше. – Moritz

ответ

4

Посмотрите на Strings and Characters Раздел Специальные символы в струнных литералах.

В соответствии с этой страницей \f не определен.

  • Экранированный специальные символы \ 0 (нулевой символ), \ (обратный слэш), \ т (горизонтальная табуляция), \ п (строки), \ г (возврат каретки), \»(двойной кавычки) и \»(апостроф)

  • произвольный скалярная Unicode, записывается в виде \ и {п}, где п представляет собой 1-8 шестнадцатеричный номер со значением, равным допустимым кодом Unicode точка

Так

  • \f Подача может быть записана в экранированной форме \u{000C}
  • \u2029 Page потока должны быть экранированы, как \u{2029}
  • \u2028 Line Сепаратор должен быть экранирован, как \u{2028}

См. Также "Unicode Control Characters"

Смежные вопросы