如何将字符串(例如“iso-8859-1")转换为 String.Encoding 对应的字符串? [英] How can I convert a string, such as "iso-8859-1", to it's String.Encoding counterpart?

查看:14
本文介绍了如何将字符串(例如“iso-8859-1")转换为 String.Encoding 对应的字符串?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

从 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.ukresponse.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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆