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

时间:2017-06-23 21:48:27

标签: swift string encoding utf-8 iso-8859-1

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

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

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

4 个答案:

答案 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}