我需要使用Windows-1251编码将西里尔字符串转换为其urlencoded版本。对于以下示例字符串:
Моцарт
正确的结果应该是:
%CC%EE%F6%E0 F0%%F2
我尝试了addingPercentEncoding(withAllowedCharacters:)
,但它不起作用。
如何在Swift中实现所需的结果?
答案 0 :(得分:3)
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
序列(使用方法)
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
}