Swift 中的 Urlencode 西里尔字符

Urlencode cyrillic characters in Swift

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

Моцарт

正确的结果应该是:

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

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

如何在Swift中达到预期的效果?

NSString 有一个 addingPercentEscapes(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 序列(使用来自 ):

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