Saya menarik file JSON dari situs dan salah satu string yang diterima adalah:
The Weeknd ‘King Of The Fall’ [Video Premiere] | @TheWeeknd | #SoPhi
Bagaimana saya bisa mengubah hal-hal seperti ‘
menjadi karakter yang benar?
Saya telah membuat Xcode Playground untuk mendemonstrasikannya:
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"])
json
swift
html-entities
code_cookies
sumber
sumber
@Akashivskyy Jawabannya bagus dan menunjukkan bagaimana memanfaatkan
NSAttributedString
untuk memecahkan kode entitas HTML. Satu kemungkinan kerugian (seperti yang dia nyatakan) adalah bahwa semua markup HTML juga dihapus, jadimenjadi
Di OS X ada
CFXMLCreateStringByUnescapingEntities()
yang berfungsi:tapi ini tidak tersedia di iOS.
Ini adalah implementasi Swift murni. Ini menerjemahkan referensi entitas karakter seperti
<
menggunakan kamus, dan semua entitas karakter numerik seperti@
atau€
. (Perhatikan bahwa saya tidak mencantumkan semua 252 entitas HTML secara eksplisit.)Cepat 4:
Contoh:
Cepat 3:
Cepat 2:
sumber
strtooul(string, nil, base)
seluruhnya akan menyebabkan kode tidak berfungsi dengan entitas karakter numerik dan macet ketika datang ke entitas yang tidak dikenali (bukannya gagal dengan baik).Versi Swift 3 dari ekstensi @ akashivskyy ,
sumber
Cepat 4
sumber
Versi Swift 2 dari ekstensi @ akashivskyy,
sumber
Versi Swift 4
sumber
rawValue
sintaksnyaNSAttributedString.DocumentReadingOptionKey(rawValue: NSAttributedString.DocumentAttributeKey.documentType.rawValue)
danNSAttributedString.DocumentReadingOptionKey(rawValue: NSAttributedString.DocumentAttributeKey.characterEncoding.rawValue)
itu mengerikan. Gantilah dengan.documentType
dan.characterEncoding
sumber
Saya mencari utilitas Swift 3.0 murni untuk melarikan diri ke / melepaskan diri dari referensi karakter HTML (yaitu untuk aplikasi Swift sisi server di macOS dan Linux) tetapi tidak menemukan solusi yang komprehensif, jadi saya menulis implementasi saya sendiri: https: //github.com/IBM-Swift/swift-html-entities
Paket,,
HTMLEntities
bekerja dengan referensi karakter bernama HTML4 serta referensi karakter numerik hex / dec, dan itu akan mengenali referensi karakter numerik khusus sesuai spesifikasi W3 HTML5 (yaitu€
harus dilepas sebagai tanda Euro (unicodeU+20AC
) dan BUKAN sebagai unicode karakter untukU+0080
, dan rentang tertentu dari referensi karakter numerik harus diganti dengan karakter penggantiU+FFFD
saat melepas).Contoh penggunaan:
Dan untuk contoh OP:
Edit:
HTMLEntities
sekarang mendukung referensi karakter bernama HTML5 pada versi 2.0.0. Penguraian yang sesuai spesifikasi juga diterapkan.sumber
( ͡° ͜ʖ ͡° )
), sedangkan tidak ada jawaban lain yang mengaturnya.Cepat 4:
Solusi total yang akhirnya berhasil untuk saya dengan kode HTML dan karakter baris baru dan tanda kutip tunggal
Pemakaian:
Saya kemudian harus menerapkan beberapa filter lagi untuk menghilangkan tanda kutip tunggal (misalnya, jangan , belum , Ini , dll.), Dan karakter baris baru seperti
\n
:sumber
Ini akan menjadi pendekatan saya. Anda dapat menambahkan kamus entitas dari https://gist.github.com/mwaterfall/25b4a6a06dc3309d9555 menyebutkan Michael Waterfall.
Contoh yang digunakan:
ATAU
sumber
Solusi Swift 4 yang Elegan
Jika Anda menginginkan tali,
tambahkan ekstensi ini ke proyek Anda:
Jika Anda menginginkan NSAttributedString dengan huruf tebal, miring, tautan, dll.,
tambahkan ekstensi ini ke proyek Anda:
sumber
Versi komputasi var dari jawaban @yishus
sumber
Cepat 4
sumber
sumber
Cepat 4
Penggunaan Sederhana
sumber
Cepat 4
Saya sangat menyukai solusi yang menggunakan documentAttributes. Namun, ini mungkin terlalu lambat untuk mengurai file dan / atau penggunaan dalam sel tampilan tabel. Saya tidak percaya Apple tidak memberikan solusi yang layak untuk ini.
Sebagai solusinya, saya menemukan Ekstensi String ini di GitHub yang berfungsi dengan sempurna dan cepat untuk decoding.
Jadi untuk situasi di mana jawaban yang diberikan lambat , lihat solusi yang disarankan di tautan ini: https://gist.github.com/mwaterfall/25b4a6a06dc3309d9555
Catatan: ini tidak mengurai tag HTML.
sumber
Jawaban yang diperbarui bekerja pada Swift 3
sumber
Objective-C
sumber
Versi Swift 3.0 dengan konversi ukuran font sebenarnya
Biasanya, jika Anda langsung mengonversi konten HTML ke string yang diatribusikan, ukuran font akan bertambah. Anda dapat mencoba mengonversi string HTML menjadi string yang diatribusikan dan kembali lagi untuk melihat perbedaannya.
Sebagai gantinya, berikut adalah konversi ukuran sebenarnya yang memastikan ukuran font tidak berubah, dengan menerapkan rasio 0,75 pada semua font:
sumber
Cepat 4
sumber
rawValue
sintaksnyaNSAttributedString.DocumentReadingOptionKey(rawValue: NSAttributedString.DocumentAttributeKey.documentType.rawValue)
danNSAttributedString.DocumentReadingOptionKey(rawValue: NSAttributedString.DocumentAttributeKey.characterEncoding.rawValue)
itu mengerikan. Gantilah dengan.documentType
dan.characterEncoding
Lihat HTMLString - pustaka yang ditulis dalam Swift yang memungkinkan program Anda menambah dan menghapus entitas HTML di Strings
Untuk kelengkapan, saya menyalin fitur utama dari situs:
sumber
Versi Swift 5.1
Juga, jika Anda ingin mengekstrak tanggal, gambar, metadata, judul dan deskripsi, Anda dapat menggunakan pod saya yang bernama:
.
Kit keterbacaan
sumber
Menggunakan:
sumber