Swlen中的Urlencode西里尔字符

时间:2018-02-19 07:23:43

标签: swift string urlencode url-encoding cyrillic

我需要使用Windows-1251编码将西里尔字符串转换为其urlencoded版本。对于以下示例字符串:

  

Моцарт

正确的结果应该是:

  

%CC%EE%F6%E0 F0%%F2

我尝试了addingPercentEncoding(withAllowedCharacters:),但它不起作用。

如何在Swift中实现所需的结果?

1 个答案:

答案 0 :(得分:3)

NSStringaddingPercentEscapes(using:)方法,允许指定任意方法 编码:

let text = "Моцарт"
if let encoded = (text as NSString).addingPercentEscapes(using: String.Encoding.windowsCP1251.rawValue) {
    print(encoded)
    // %CC%EE%F6%E0%F0%F2
}

但是,从iOS 9 / macOS 10.11开始 已弃用。它会导致编译器警告,并且可能在较新的OS版本中不可用。

您可以做的是将字符串do Data转换为 所需的编码, 然后将每个字节转换为相应的%NN序列(使用方法) How to convert Data to hex string in swift):

let text = "Моцарт"
if let data = text.data(using: .windowsCP1251) {
    let encoded = data.map { String(format: "%%%02hhX", $0) }.joined()
    print(encoded)
    // %CC%EE%F6%E0%F0%F2
}