一尘不染

Swift HTML解码问题

swift

在Swift中,我使用解码HTML NSAttributedString,如下所示:

let encodedString = "Phải công nhận rằng kể từ lúc ông Thăng làm bộ trưởng"
let encodedData = encodedString.dataUsingEncoding(NSUTF8StringEncoding)
let attributedOptions = [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType]
let attributedString = NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil, error: nil)         
let decodedString = attributedString.string
println(decodedString)

但是结果是这样的:

摆脱水坝»数十个»贸易促进»™返回

真实结果必须与 encodedString

这种方法有什么问题?


阅读 271

收藏
2020-07-07

共1个答案

一尘不染

您必须在文档选项中指定使用的字符 编码

let encodedString = "Phải công nhận rằng kể từ lúc ông Thăng làm bộ trưởng"
let encodedData = encodedString.data(using: .utf8)!

let attributedOptions : [NSAttributedString.DocumentReadingOptionKey : Any ] = [
    .documentType: NSAttributedString.DocumentType.html,
    .characterEncoding: String.Encoding.utf8.rawValue ]
do {
    let attributedString = try NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil)
    let decodedString = attributedString.string
    print(decodedString)
} catch {
    // error ...
}

// Output: Phải công nhận rằng kể từ lúc ông Thăng làm bộ trưởng

(已为Swift 4更新)

2020-07-07