การถอดรหัส ‘ ในวัตถุประสงค์ค

ฉันกำลังบันทึกข้อมูลจาก WebService และข้อมูลบางส่วนมี ASCII caracters เช่น ‘ หรือ #038; ในตอนแรกฉันคิดว่าการตั้งค่าสตริงด้วยข้อความที่มี caracacters เช่นนั้นจะทำงานได้อย่างสมบูรณ์แบบเนื่องจากมีอย่างอื่นเช่นสำเนียง \u00f3 ที่ถอดรหัสออกมา UILabels แต่ 2 อันนั้นไม่มี

ทำไมเป็นเช่นนี้? ฉันเข้าใจถูกต้องหรือไม่?

ขอบคุณ.


person subharb    schedule 25.03.2013    source แหล่งที่มา
comment
การหลีกเช่น \u00f3 ในตัวอักษรสตริงจะได้รับการประเมิน ณ เวลาคอมไพล์ หากคุณมีข้อมูลรันไทม์ที่มี Escape เหล่านี้ ระบบจะไม่ตีความข้อมูลเหล่านั้น และ ‘ ไม่ใช่แม้แต่การหลีกเลี่ยงสตริง มันเป็นเอนทิตี HTML   -  person Lily Ballard    schedule 26.03.2013


คำตอบ (1)


การแทนที่เอนทิตี HTML

เนื่องจากคุณกำลังบันทึกข้อมูลจาก WebService คุณจึงใช้ หมวดหมู่ NSString สำหรับ HTML ได้ ตามที่อธิบายไว้ในโพสต์นี้: Objective-C: วิธีแทนที่ HTML เอนทิตี?

(เอนทิตี Html มีลักษณะดังนี้: ‘ - ข้อมูลเพิ่มเติมเกี่ยวกับ wikipedia)

วิธีการที่มีอยู่ในหมวดหมู่คือ:

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



การตอบกลับความคิดเห็น

[NSAttributedString initWithHTML: documentAttributes:]

เริ่มต้นและส่งกลับวัตถุ NSAttributedString ใหม่จาก HTML ที่มีอยู่ในวัตถุข้อมูลที่กำหนด

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

ฉันใช้สิ่งนี้ตลอดเวลาและทำงานได้อย่างสมบูรณ์แบบ ฉันยังสร้างมาโครด้วย:

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

การใช้งาน:

NSAttributedString* attributedString = html2AttributedString(yourNSString);

จากนั้น คุณสามารถสร้างมาโครสำหรับสี การจัดตำแหน่ง แบบอักษร ฯลฯ...

สำหรับ iOS คุณสามารถดูหน้านี้ ซึ่งมีให้ คุณเป็นคนทดแทน

วิธีการ initWithHTML ของเรามีเป้าหมายที่จะจับคู่ผลลัพธ์จากเวอร์ชัน Mac ได้อย่างสมบูรณ์แบบ สิ่งนี้เป็นไปได้ที่จะบรรลุผลสำเร็จสำหรับตัวละคร และฉันมีการทดสอบหน่วยเพื่อให้แน่ใจว่าสิ่งนี้จะสมบูรณ์แบบอยู่เสมอ มีหลายสิ่งที่ต้องทำแตกต่างกันเล็กน้อยบน iOS เพื่อให้ได้รูปลักษณ์ที่เหมือนกันเกี่ยวกับคุณลักษณะต่างๆ ฉันจะไม่รบกวนคุณด้วยรายละเอียดที่นั่น

person Jean    schedule 25.03.2013
comment
ฉันไม่ได้ตั้งคำถามถึงความถูกต้องของ -stringByDecodingHTMLEntities แต่สำหรับ -stringByConvertingHTMLToPlainText คุณไม่สามารถสร้าง NSAttributedString จาก HTML แล้วรับค่าสตริงแทนได้ไหม - person zneak; 26.03.2013
comment
@zneak ฉันแค่อ้างถึงผู้เขียนหมวดหมู่โดยแสดงรายการวิธีการที่มีอยู่ แต่ใช่ NSAttributedString มีวิธีการที่ยอดเยี่ยม initWithHTML: dataUsingEncoding: ที่สามารถใช้ในการสร้างสตริงที่มีแอตทริบิวต์จากโค้ด HTML เอนทิตีจะถูกตีความเช่นเดียวกับมาร์กอัป (นั่นคือสาเหตุที่ฉันไม่แนะนำ) ดูเหมือนว่า OP ต้องการกำจัดเอนทิตี html เท่านั้น - person Jean; 26.03.2013
comment
คุณช่วยอธิบายเพิ่มเติมเกี่ยวกับเรื่องนั้นได้ไหม? ฉันจะต้องแยกวิเคราะห์ HTML ทุกประเภทจริงๆ ฉันเพิ่งรู้ว่า WS มีแท็ก html อยู่บ้าง ขอบคุณ! - person subharb; 26.03.2013
comment
@DavidShaikh เสร็จแล้ว ฉันเพิ่มข้อมูลเพิ่มเติมเกี่ยวกับ NSAttributedString initWithHTML: documentAttributes:] โปรดทราบว่าความคิดเห็นของฉันด้านบนมีข้อผิดพลาด: ไม่ใช่ initWithHTML: dataUsingEncoding: แต่ initWithHTML: documentAttributes: แน่นอน - person Jean; 26.03.2013
comment
@DavidShaikh ไม่ แต่มีวิธีอื่น ฉันอัปเดตคำตอบของฉันตามนั้น หวังว่านี่จะช่วยได้ - person Jean; 26.03.2013