swift2 Swift 2.0新行转义字符串(字符串编码)

vuktfyat  于 2022-11-06  发布在  Swift
关注(0)|答案(2)|浏览(242)

我正在尝试转义字符串以换到新行,即\n。例如,假设字符串为:-

First Line Of String
second Line of String
Third Line of String

现在如果我使用字符串扩展名

func escapeString() -> String{
newString =   self.stringByRemovingPercentEncoding
return newString
}

这个扩展没有给予我newString作为

First Line Of String\nSecond Line Of String\nThird Line Of String

我需要上述字符串作为jsonString传递给服务器。即,我必须将其编码为字符串

hec6srdp

hec6srdp1#

"雨燕5"
您可以使用JSONEncoder转义\n、\、\t、\r、'“等字符,而不是手动替换字符串中的这些字符,例如:

extension String {
    var escaped: String {
        if let data = try? JSONEncoder().encode(self) {
            let escaped = String(data: data, encoding: .utf8)!
            // Remove leading and trailing quotes
            let set = CharacterSet(charactersIn: "\"")
            return escaped.trimmingCharacters(in: set)
        }
        return self
    }
}

let str = "new line - \n, quote - \", url - https://google.com"
print("Original: \(str)")
print("Escaped: \(str.escaped)")

输出:

Original: new line - 
, quote - ", url - https://google.com
Escaped: new line - \n, quote - \", url - https:\/\/google.com
z4iuyo4d

z4iuyo4d2#

stringByRemovingPercentEncoding代表percent encoding as used in URLs,正如你从名称中所预期的那样。(如果不是从名称中所预期的,也可能是从阅读文档中所预期的,其中的相关部分甚至会出现在Xcode代码完成中。)也就是说,它接受一个类似于“some%20text%20with%20spaces”的字符串,并将其转换为“some text with spaces”。
如果你想做一个不同类型的字符替换,你需要自己去做。但是这仍然可以是一行代码:

extension String {
    var withEscapedNewlines: String {
        return self.stringByReplacingOccurrencesOfString("\n", withString: "\\n")
    }
}

注意self.stringByReplacingOccurrencesOfString的第一个参数是传递给Swift编译器的转义码,因此该参数的实际值是换行符(ASCII/UTF8 0x 0A)。第二个参数转义反斜杠(在传递给Swift编译器的文本中),因此该参数的实际值是文本\n

相关问题