Menguraikan ' secara objektif c

Saya menyimpan data dari Layanan Web dan beberapa info memiliki karakter ASCII seperti ‘ atau #038; Pada awalnya saya berpikir bahwa menyetel string dengan teks yang berisi karakter seperti itu akan berfungsi dengan baik karena ada aksen lain, seperti aksen \u00f3, yang muncul didekodekan dalam UILabels tetapi 2 misalnya tidak.

Kenapa ini? Apakah saya memahaminya dengan benar?

Terima kasih.


person subharb    schedule 25.03.2013    source sumber
comment
Lolos seperti \u00f3 dalam literal string dievaluasi pada waktu kompilasi. Jika Anda memiliki data runtime yang memiliki pelolosan ini, maka data tersebut tidak akan ditafsirkan. Dan ‘ bahkan bukan sebuah string escape; itu adalah entitas HTML.   -  person Lily Ballard    schedule 26.03.2013


Jawaban (1)


Mengganti entitas HTML

Karena Anda menyimpan data dari Layanan Web, Anda dapat menggunakan kategori NSString ini untuk HTML seperti yang dijelaskan dalam posting ini: Objective-C: Cara mengganti HTML entitas?

(Entitas HTML adalah hal-hal seperti: ‘ - Selengkapnya tentang wikipedia)

Metode yang tersedia dalam kategori ini adalah:

- (NSString *)stringByConvertingHTMLToPlainText;
- (NSString *)stringByDecodingHTMLEntities;
- (NSString *)stringByEncodingHTMLEntities;
- (NSString *)stringWithNewLinesAsBRs;
- (NSString *)stringByRemovingNewLinesAndWhitespace;



Respon terhadap komentar

[NSAttributedString initWithHTML: documentAttributes:]

Menginisialisasi dan mengembalikan objek NSAttributedString baru dari HTML yang terdapat dalam objek data yang diberikan.

NSData* htmlData = [yourHTMLString dataUsingEncoding:NSUTF8StringEncoding]
NSAttributedString* theAttributedString = [[NSAttributedString alloc] initWithHTML:htmlData documentAttributes:NULL];

Saya menggunakan ini sepanjang waktu dan berfungsi dengan sempurna. Saya bahkan membuat makro darinya:

#define html2AttributedString(htmlString)                                                                   \
    [[[NSAttributedString alloc] initWithHTML:[(htmlString) dataUsingEncoding:NSUTF8StringEncoding]         \
    documentAttributes:NULL] autorelease]

Penggunaan:

NSAttributedString* attributedString = html2AttributedString(yourNSString);

Dan kemudian, Anda dapat membuat makro untuk warna, perataan, font, dll…

Untuk iOS, Anda dapat melihat halaman ini di mana mereka memberikan kamu penggantinya.

Metode initWithHTML kami bertujuan untuk mencocokkan output dari versi Mac dengan sempurna. Hal ini dapat dicapai untuk karakter dan saya memiliki pengujian unit yang memastikan ini tetap sempurna. Mengenai atribut ada banyak hal yang harus dilakukan sedikit berbeda di iOS untuk mendapatkan tampilan yang sama. Saya tidak akan mengganggu Anda dengan detailnya di sana.

person Jean    schedule 25.03.2013
comment
Saya tidak mempertanyakan validitas -stringByDecodingHTMLEntities, tetapi untuk -stringByConvertingHTMLToPlainText, tidak bisakah Anda membuat NSAttributedString dari HTML dan mengambil nilai stringnya? - person zneak; 26.03.2013
comment
@zneak Saya baru saja mengutip penulis kategori, mencantumkan metode yang tersedia. Tapi, ya, NSAttributedString memiliki metode hebat initWithHTML: dataUsingEncoding: yang dapat digunakan untuk membuat string yang diatribusikan dari kode HTML. Entitasnya memang akan diinterpretasikan, begitu juga dengan markupnya (makanya saya tidak menyarankannya). Sepertinya OP hanya ingin menghilangkan entitas html. - person Jean; 26.03.2013
comment
Bisakah Anda menjelaskan lebih lanjut mengenai hal itu? Saya sebenarnya perlu mengurai segala jenis HTML, saya baru menyadari bahwa WS memiliki beberapa tag html. Terima kasih! - person subharb; 26.03.2013
comment
@DavidShaikh Selesai. Saya menambahkan lebih banyak informasi tentang NSAttributedString initWithHTML: documentAttributes:]. Harap dicatat bahwa ada kesalahan dalam komentar saya di atas: bukan initWithHTML: dataUsingEncoding: tetapi initWithHTML: documentAttributes: tentu saja. - person Jean; 26.03.2013
comment
@DavidShaikh Tidak, tapi ada cara lain. Saya memperbarui jawaban saya. Semoga ini membantu. - person Jean; 26.03.2013