swift - Swift 中的 Urlencode 西里尔字符

标签 swift string urlencode url-encoding cyrillic

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

Моцарт

正确的结果应该是:

%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 起,已弃用。它会导致编译器警告,并且可能无法在较新的操作系统版本中使用。

您可以做的是将字符串 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
}

关于swift - Swift 中的 Urlencode 西里尔字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48861272/

相关文章:

ios - 自定义按钮不响应触摸 - 快速

parameters - 如何在 QT 中编码 URL 参数?

string - 在远程计算机上使用Invoke-Command时,字符串扩展在PowerShell中不起作用

android - 在 Android 应用程序上显示其他语言文本

vb.net - 如何用x个字符分割字符串

url - 如何在 Emacs Lisp 中 "URL decode"字符串?

codeigniter - Codeigniter是“catching” url字符,即使它们已经过urlencoded

swift - 如何将数据导入 Realm

ios - 在 iOS 中验证文本域

ios - 更改 UIImageView 中 UIImage 的大小和位置(快速)