gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 01:19:07 26 4
gpt4 key购买 nike

从 Swift 发送 HTTP 请求后,我在响应中得到一个名为 textEncodingName 的字段。

我想将我也收到的 data 对象转换为包含其内容的字符串,为此,我正在使用 String(data: data!, encoding: .utf8 )。这在大多数情况下都有效,因为大多数网站都是 UTF-8 编码的。但是,例如 https://www.google.co.ukresponse.textEncodingName == "iso-8859-1"

我猜其他网站会使用更晦涩的编码,所以我的问题是:如何找到正确的编码来将我的 data 对象转换为正确的字符串。

最佳答案

您可以简单地为 iso-8859-1 尝试 String.Encoding.windowsCP1250。请引用https://en.wikipedia.org/wiki/Windows-1250

String(data: data, encoding: .windowsCP1250)

或者..

我发现几个步骤可以将您从 textEncodingName 带到相应的 String.Encoding 值:

let estr = "iso-8859-1"
let cfe = CFStringConvertIANACharSetNameToEncoding(estr as CFString)
let se = CFStringConvertEncodingToNSStringEncoding(cfe)
let encoding = String.Encoding(rawValue: se)

这主要基于 URLResponse.textEncodingName 的文档:

You can convert this string to a CFStringEncoding value by calling CFStringConvertIANACharSetNameToEncoding(:). You can subsequently convert that value to an NSStringEncoding value by calling 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")
}

关于swift - 如何将字符串(例如 "iso-8859-1")转换为对应的 String.Encoding 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44730379/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com