Быстрое удаление символов Юникода в Swift

Как быстро убрать символы Юникода в Swift Strings? Прямо сейчас у меня есть массив строк, и, чтобы сделать его более удобочитаемым для пользователя, я добавил следующий код, который перебирает каждую строку в массиве.

for i in 0...(titles.count - 1) {
    var s = titles[i]
    s = s.stringByReplacingOccurrencesOfString(""", withString: "\"")
    s = s.stringByReplacingOccurrencesOfString("&", withString: "&")
    s = s.stringByReplacingOccurrencesOfString("\\u00e1", withString: "\u{00e1}")
    s = s.stringByReplacingOccurrencesOfString("\\u00e9", withString: "\u{00e9}")
    s = s.stringByReplacingOccurrencesOfString("\\u00e8", withString: "\u{00e8}")
    s = s.stringByReplacingOccurrencesOfString("\\u00e0", withString: "\u{00e0}")
    s = s.stringByReplacingOccurrencesOfString("\\u00d8", withString: "\u{00d8}")
    s = s.stringByReplacingOccurrencesOfString("\\u00c3", withString: "\u{00c3}")
    s = s.stringByReplacingOccurrencesOfString("\\u00a4", withString: "\u{00a4}")
    s = s.stringByReplacingOccurrencesOfString("\\u00eb", withString: "\u{00eb}")
    s = s.stringByReplacingOccurrencesOfString("\\u2022", withString: "\u{2022}")
    s = s.stringByReplacingOccurrencesOfString("\\u00c9", withString: "\u{00c9}")
    s = s.stringByReplacingOccurrencesOfString("\\u00b3", withString: "\u{00b3}")
    s = s.stringByReplacingOccurrencesOfString("\\u2019", withString: "\u{2019}")
    s = s.stringByReplacingOccurrencesOfString("\\u2730", withString: "\u{2730}")
    s = s.stringByReplacingOccurrencesOfString("\\u266b", withString: "\u{266b}")
    s = s.stringByReplacingOccurrencesOfString("\\u00f8", withString: "\u{00f8}")
    s = s.stringByReplacingOccurrencesOfString("\\/", withString: "/")
    titles[i] = s
}

Например, в пятой строке любое вхождение \u00e1 заменяется соответствующим символом Юникода á.

Массив строк создается с помощью:

myHTMLString = try NSString(contentsOfURL: url, encoding: NSUTF8StringEncoding)

Где url = NSURL(string: "http://songa.nl/ajax.php?params=playlist/load/US87OmpN")!

и разделение строки на разные подстроки, когда встречается ".

Есть ли менее хакерский (и, возможно, более быстрый) и более общий способ распаковать символы юникода?


person Afstkla    schedule 04.07.2015    source источник
comment
Что означает решимость?   -  person Kerrek SB    schedule 04.07.2015
comment
resolve будет автоматически «преобразовывать» \ꯍ в \u{ABCD} в строках, тем самым «разрешая» коды Юникода в каждой строке в соответствующие символы.   -  person Afstkla    schedule 04.07.2015
comment
Не могли бы вы поместить свой вопрос в свой вопрос? Сформулируйте свои цели ясно, точно и лаконично, и не заставляйте людей гадать.   -  person Kerrek SB    schedule 04.07.2015
comment
(Я думаю, что термин, который вы, возможно, ищете, это unescape.)   -  person Kerrek SB    schedule 04.07.2015
comment
Данные с этого URL-адреса находятся в формате JSON. Если вы используете класс NSJSONSerialization для преобразования данных в объект, все деэкранирование выполняется автоматически.   -  person Martin R    schedule 04.07.2015


Ответы (1)


Основываясь на комментарии Керрека и поиске «unescape» вместо «разрешить», следующие строки решили мою проблему:

let transform = "Any-Hex/Java"
let input = "\\u5404\\u500b\\u90fd" as NSString
var convertedString = input.mutableCopy() as NSMutableString

CFStringTransform(convertedString, nil, transform as NSString, 1)

println("convertedString: \(convertedString)")
// convertedString: 各個都

Как видно из: Использование Swift для распаковки символов Юникода, т.е. ሴ

person Afstkla    schedule 04.07.2015