如何将字符串(例如“iso-8859-1")转换为 String.Encoding 对应的字符串? [英] How can I convert a string, such as "iso-8859-1", to it's String.Encoding counterpart?
问题描述
从 Swift 发送 HTTP 请求后,我在响应中得到一个名为 textEncodingName
的字段.
After sending a HTTP request from Swift, I get a field in the response called textEncodingName
.
我想将我也收到的 data
对象转换为包含其内容的字符串,为此,我使用 String(data: data!, encoding: .utf8)
.这在大多数情况下都有效,因为大多数网站都是 UTF-8 编码的.但是,例如,对于 https://www.google.co.uk
,response.textEncodingName == "iso-8859-1"
.
I want to convert the data
object I also received into a string containing its contents, and to do this, I'm using String(data: data!, encoding: .utf8)
. This works most of the time, because most websites are UTF-8 encoded. But with, for example, https://www.google.co.uk
, the response.textEncodingName == "iso-8859-1"
.
我猜其他网站会使用更晦涩的编码,所以我的问题是:如何找到正确的编码将我的 data
对象转换为正确的字符串.
I guess other websites would use even more obscure encodings, so my question is this: how can I find the right encoding to convert my data
object to the correct string.
推荐答案
您可以简单地尝试 String.Encoding.windowsCP1250
for iso-8859-1
.请参考 https://en.wikipedia.org/wiki/Windows-1250 >
You can simply try String.Encoding.windowsCP1250
for iso-8859-1
. Please refer https://en.wikipedia.org/wiki/Windows-1250
String(data: data, encoding: .windowsCP1250)
或..
我发现了几个步骤,可以让您从 textEncodingName
到相应的 String.Encoding
值:
I found a few steps that will take you from the textEncodingName
to the corresponding 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
的文档:
This is largely based on the documentation for URLResponse.textEncodingName
:
您可以通过调用 CFStringConvertIANACharSetNameToEncoding(:) 将此字符串转换为 CFStringEncoding 值.您可以随后通过调用 CFStringConvertEncodingToNSStringEncoding(:).
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(:).
这是检查原始文本编码字符串是否有效的更新:
Here's an update that checks to see if the original text encoding string is valid or not:
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")
}
这篇关于如何将字符串(例如“iso-8859-1")转换为 String.Encoding 对应的字符串?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!