如何将字符串(例如“iso-8859-1”)转换为 String.Encoding 对应的字符串?

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对象转换为正确的字符串。

rma*_*ddy 7

你可以简单地尝试String.Encoding.windowsCP1250iso-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)