从 Swift 发送 HTTP 请求后,我在响应中得到一个名为textEncodingName
.
我想转换data
我还收到了一个包含其内容的字符串,为此,我使用String(data: data!, encoding: .utf8)
。这在大多数情况下都有效,因为大多数网站都是 UTF-8 编码的。但例如,https://www.google.co.uk
, the response.textEncodingName == "iso-8859-1"
.
我猜其他网站会使用更晦涩的编码,所以我的问题是:如何找到正确的编码来转换我的data
对象正确的字符串。
你可以简单地尝试String.Encoding.windowsCP1250
for iso-8859-1
。请参考https://en.wikipedia.org/wiki/Windows-1250
String(data: data, encoding: .windowsCP1250)
OR..
我找到了一些步骤,可以帮助您从textEncodingName
到对应的String.Encoding
value:
let estr = "iso-8859-1"
let cfe = CFStringConvertIANACharSetNameToEncoding(estr as CFString)
let se = CFStringConvertEncodingToNSStringEncoding(cfe)
let encoding = String.Encoding(rawValue: se)
这主要基于以下文档URLResponse.textEncodingName
:
您可以通过调用 CFStringConvertIANACharSetNameToEncoding(:)。随后,您可以通过调用 CFStringConvertEncodingToNSStringEncoding(:).
这是一个更新,用于检查原始文本编码字符串是否有效:
let estr = "XXX"
let cfe = CFStringConvertIANACharSetNameToEncoding(estr as CFString)
if cfe != kCFStringEncodingInvalidId {
let se = CFStringConvertEncodingToNSStringEncoding(cfe)
let sse = String.Encoding(rawValue: se)
print("sse = \(sse)")
} else {
print("Invalid")
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)