Вам может потребоваться использовать регулярные выражения:
class StringEscpingRegex: NSRegularExpression {
override func replacementString(for result: NSTextCheckingResult, in string: String, offset: Int, template templ: String) -> String {
let nsString = string as NSString
if
result.numberOfRanges == 2,
case let capturedString = nsString.substring(with: result.rangeAt(1)),
let codePoint = UInt32(capturedString, radix: 16),
codePoint != 0xFFFE, codePoint != 0xFFFF, codePoint <= 0x10FFFF,
codePoint<0xD800 || codePoint > 0xDFFF
{
return String(Character(UnicodeScalar(codePoint)!))
} else {
return super.replacementString(for: result, in: string, offset: offset, template: templ)
}
}
}
let pattern = "\\\\u\\{([0-9A-Fa-f]{1,6})\\}"
let regex = try! StringEscpingRegex(pattern: pattern)
let input = "\\u{0026} something else here"
let expectedOutput = "& something else here"
let actualOutput = regex.stringByReplacingMatches(in: input, range: NSRange(0..<input.utf16.count), withTemplate: "?")
assert(actualOutput == expectedOutput) //assertion succeeds
Я не понимаю, как вы получили ваш input
. Но если вы приняли стандартное представление, вы можете просто получить expectedOutput
.
'' \ u {0026} что-то еще здесь «logs» и что-то еще здесь ». В чем проблема? –
Сделано редактирование, чтобы добавить дополнительную обратную косую черту. Спасибо за указание – Junz
Откуда взялась строка? * Почему * он закодирован так? –