Использование Swift для удаления символов Юникода, т.е. u1234

#utf-8 #swift

#utf-8 #swift

Вопрос:

У меня возникают проблемы со специальными символами при использовании JSON в xcode 6 с swift

Я нашел эти коды в Cocoa / objective C для решения некоторых проблем с преобразованием акцента, но не смог заставить его работать в Swift. Есть предложения по его использованию? … лучшие альтернативные предложения также были бы классными…

Спасибо

 NSString *input = @"\u5404\u500b\u90fd";
NSString *convertedString = [input mutableCopy];

CFStringRef transform = CFSTR("Any-Hex/Java");
CFStringTransform((__bridge CFMutableStringRef)convertedString, NULL, transform, YES);

NSLog(@"convertedString: %@", convertedString);
// prints: 各個都, tada!
 

Комментарии:

1. Покажите попытку, которую вы предприняли для преобразования кода.

Ответ №1:

В Swift это довольно похоже, хотя вам все равно нужно использовать базовые классы строк:

 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: 各個都
 

(Последний параметр бросил меня в цикл, пока я не понял, что Boolean в Swift это псевдоним типа для UInt — YES в Objective-C становится 1 в Swift для этих типов методов.)

Комментарии:

1. У меня такая же проблема с чтением регулярных выражений из файла plist ( получает экранированный результат \). Используя ваше решение, я получаю изменения только тогда, когда значение выводится на консоль, но переменная, как я вижу ее в отладке, остается прежней. Как мне получить неэкранированные символы для использования в моем коде?

Ответ №2:

Быстрое 4-струнное расширение

 extension String {
    var unescapingUnicodeCharacters: String {       
        let mutableString = NSMutableString(string: self)
        CFStringTransform(mutableString, nil, "Any-Hex/Java" as NSString, true)

        return mutableString as String
    }
}
 

Ответ №3:

Быстрый 3

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

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

print("convertedString: (convertedString)")
// convertedString: 各個都