【问题标题】:Swift 2.0 Escaping string for new line (String Encoding)Swift 2.0 转义字符串换行(字符串编码)
【发布时间】:2016-01-15 11:38:18
【问题描述】:

我正在尝试为新行转义字符串,即 \n。 例如让我们说字符串是:-

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

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

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

这个扩展没有给我 newString as

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

我需要将上面的字符串作为 jsonString 传递给 server.i.e.我必须对它进行字符串编码

【问题讨论】:

  • 也许,我不明白你的需求,但让 js = "{\"alfa\":true\n\"beta\":false}" 是有效的 JSON。尝试打印它:-)

标签: string swift encoding swift2 ios9


【解决方案1】:

斯威夫特 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

【讨论】:

    【解决方案2】:

    stringByRemovingPercentEncoding 代表percent encoding as used in URLs,正如您可能从名称中所期望的那样。 (如果不是从那,可能是从阅读the docs,其中的相关部分甚至出现在Xcode代码完成中。)也就是说,它需要一个像“some%20text%20with%20spaces”这样的字符串并将其转换为“some带空格的文本”。

    如果您想进行不同类型的字符替换,则需要自己进行。但这仍然可以是单行的:

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

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

    【讨论】:

    • 斯威夫特 3:extension String { var withEscapedNewlines: String { return self.replacingOccurrences(of:"\n", with:"\\n") } }
    猜你喜欢
    • 2015-10-11
    • 2017-08-25
    • 2020-06-16
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多