Zac*_*Zac 2 string encoding utf-8 iso-8859-1 swift
从 Swift 发送 HTTP 请求后,我在响应中得到一个名为textEncodingName.
我想将data我也收到的对象转换为包含其内容的字符串,为此,我使用String(data: data!, encoding: .utf8). 这在大多数情况下都有效,因为大多数网站都是 UTF-8 编码的。但,例如https://www.google.co.uk,对response.textEncodingName == "iso-8859-1"。
我猜其他网站会使用更晦涩的编码,所以我的问题是:如何找到正确的编码将我的data对象转换为正确的字符串。
你可以简单地尝试String.Encoding.windowsCP1250了iso-8859-1。请参考https://en.wikipedia.org/wiki/Windows-1250
String(data: data, encoding: .windowsCP1250)
Run Code Online (Sandbox Code Playgroud)
或者..
我找到了几个步骤,可以带您从textEncodingName到相应的String.Encoding值:
let estr = "iso-8859-1"
let cfe = CFStringConvertIANACharSetNameToEncoding(estr as CFString)
let se = CFStringConvertEncodingToNSStringEncoding(cfe)
let encoding = String.Encoding(rawValue: se)
Run Code Online (Sandbox Code Playgroud)
这主要基于以下文档URLResponse.textEncodingName:
您可以通过调用 CFStringConvertIANACharSetNameToEncoding( :)将此字符串转换为 CFStringEncoding 值。您随后可以通过调用 CFStringConvertEncodingToNSStringEncoding( :)将该值转换为 NSStringEncoding 值。
这是检查原始文本编码字符串是否有效的更新:
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")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3226 次 |
| 最近记录: |