从Swift发送HTTP请求后,我在响应中得到一个名为textEncodingName
的字段。
我想将我收到的data
对象转换为包含其内容的字符串,为此,我使用String(data: data!, encoding: .utf8)
。这大部分时间都有效,因为大多数网站都是UTF-8编码的。但是,例如https://www.google.co.uk
,response.textEncodingName == "iso-8859-1"
。
我猜其他网站会使用更加模糊的编码,所以我的问题是:如何找到正确的编码方式将我的data
对象转换为正确的字符串。
答案 0 :(得分:1)
我找到了一些步骤,可以将您从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
的文档:
您可以通过调用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")
}
答案 1 :(得分:0)
我会编写一个带有visioShape.get_Cells("LineColor").Formula = "RGB(255,0,0)";
原始值和计算属性的枚举,以返回相应的String
值。然后,您可以使用其String.Encoding
创建实例。
init(rawValue:)
答案 2 :(得分:0)
在swift中你可以使用:
func getTextFrom(_ url: URL) -> String? {
guard let data = try? Data(contentsOf: url) else {
return nil
}
return String(data: data, encoding: .utf8) ??
String(data: data, encoding: .isoLatin1)
}
答案 3 :(得分:0)
在Swift中,您可以使用:
guard let string = String(data: data, encoding: .isoLatin1) else {return}
guard let perfectData = string.data(using: .utf8, allowLossyConversion: true) else {return}