[解決済み] SwiftでHTMLエンティティをデコードするには?
2022-07-03 02:28:22
質問
あるサイトからJSONファイルを取得しているのですが、受信した文字列の1つは、次のようになっています。
The Weeknd ‘King Of The Fall’ [Video Premiere] | @TheWeeknd | #SoPhi
のようなものはどのように変換すればよいのでしょうか?
‘
のようなものを正しい文字に変換するにはどうしたらよいでしょうか?
XcodeのPlaygroundを作ってデモしてみました。
import UIKit
var error: NSError?
let blogUrl: NSURL = NSURL.URLWithString("http://sophisticatedignorance.net/api/get_recent_summary/")
let jsonData = NSData(contentsOfURL: blogUrl)
let dataDictionary = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) as NSDictionary
var a = dataDictionary["posts"] as NSArray
println(a[0]["title"])
どのように解決するのですか?
この回答は Swift 5.2 および iOS 13.4 SDK 用に最後に修正されました。
ストレートな方法はないのですが、以下のように
NSAttributedString
マジックを使って、この処理をできるだけ簡単に行うことができます (この方法では、すべての HTML タグも除去してしまうので注意してください)。
以下のことを忘れないでください。
を初期化することを忘れないでください。
NSAttributedString
メインスレッドのみから
. 下のHTMLのパースにWebKitを使用しているため、このような要件があります。
// This is a[0]["title"] in your case
let htmlEncodedString = "The Weeknd <em>‘King Of The Fall’</em>"
guard let data = htmlEncodedString.data(using: .utf8) else {
return
}
let options: [NSAttributedString.DocumentReadingOptionKey: Any] = [
.documentType: NSAttributedString.DocumentType.html,
.characterEncoding: String.Encoding.utf8.rawValue
]
guard let attributedString = try? NSAttributedString(data: data, options: options, documentAttributes: nil) else {
return
}
// The Weeknd ‘King Of The Fall’
let decodedString = attributedString.string
extension String {
init?(htmlEncodedString: String) {
guard let data = htmlEncodedString.data(using: .utf8) else {
return nil
}
let options: [NSAttributedString.DocumentReadingOptionKey: Any] = [
.documentType: NSAttributedString.DocumentType.html,
.characterEncoding: String.Encoding.utf8.rawValue
]
guard let attributedString = try? NSAttributedString(data: data, options: options, documentAttributes: nil) else {
return nil
}
self.init(attributedString.string)
}
}
let encodedString = "The Weeknd <em>‘King Of The Fall’</em>"
let decodedString = String(htmlEncodedString: encodedString)
関連
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
-
[解決済み] UnixツールでJSONをパースする
-
[解決済み] CSSコンテンツによるHTMLエンティティの追加
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] Swiftで#pragmaマーク?
-
[解決済み] Swiftでindexとelementでループを反復させる方法
-
[解決済み】Pythonの文字列でHTMLエンティティをデコードしますか?
-
[解決済み] bashの変数をjqに渡す
-
[解決済み] VSCodeでlaunch.jsonに環境変数を追加する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SQLAlchemy (psycopg2.ProgrammingError) can't adapt type 'dict'.
-
[解決済み] JSONDecodeError: 期待される値:行1列1
-
[解決済み] Postgresで、レコードにjsonや文字列が混在している場合に、'invalid input syntax for type json'を防ぐにはどうしたらよいでしょうか。
-
[解決済み] GIFをLottie jsonに変換するにはどうしたらいいですか?
-
[解決済み] JSON標準 - 浮動小数点数
-
[解決済み] ASP.NETでJSONを単純なDictionary<string,string>にデシリアライズするにはどうすればよいですか?
-
Ext.grid.EditorGridPanelを使用する際に発生する問題点
-
[解決済み] VS Codeで、"JSONではコメントが許可されていません "というエラーを無効にする。
-
[解決済み] どのようにjqを使用して2つのファイルから2つのJSONオブジェクトをマージするには?
-
[解決済み] jsonパラメータを含むCurl GETリクエスト