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
}
我需要使用 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
}