2011-11-01 38 views
5

tôi đã nhận thấy rằng biểu tượng cảm xúc trong ứng dụng của tôi đã ngừng hiển thị đúng trên một UIWebView trong iOS 5.Emoji và UIWebView trong iOS 5

Tất cả các ký tự được mã hóa cho HTML khi chúng được hiển thị và HTML đầu ra là:

<p>Emoji (iOS 4): &#55357;&#56850;</p> 

UTF-8 này HTML mã hóa được trả lại một cách chính xác trong một UIWebView trong iOS 4, nhưng không phải trong 5:

enter image description here

tôi hiểu đó đã có một số thay đổi trong iOS 5 liên quan đến biểu tượng cảm xúc, nhưng ký tự biểu tượng cảm xúc đã được mã hóa thành & # 55357; & # 56850; được tạo trên iOS 5, do đó, các ký tự 2 byte phải chính xác. Không có thay đổi nào khác được thực hiện đối với mã do đó chắc chắn đã có một số thứ được giới thiệu với iOS 5.

Mọi lời khuyên sẽ được đánh giá cao và tôi sẽ cung cấp thêm thông tin nếu cần. Cảm ơn.

Trả lời

10

Tôi đã có một response from the developer forums:

Các phân tích cú pháp HTML trong iOS 5 và Safari 5.1 đã thay đổi, và tài liệu tham khảo nhân vật trong phạm vi 0xD800..0xDFFF (55296..57343) đều được coi là lỗi phân tích cú pháp và tạo ra một nhân vật thay thế đối tượng (thường được biểu diễn như một viên kim cương có dấu chấm hỏi). Thay đổi về hành vi này phù hợp với những gì HTML5 chỉ định. Điều này có nghĩa rằng bạn không còn có thể mã hóa các ký tự bằng cách sử dụng các tham chiếu ký tự cặp thay thế.

Một giải pháp tương đối đơn giản là sử dụng tham chiếu ký tự đơn thay vì cặp thay thế. Trong ví dụ của bạn, thay vì (0xD83D, 0xDE12), sử dụng 0x1F612. Bạn có thể sử dụng thập lục phân hoặc số thập phân:

& # x1f612; hoặc & # 128530;

Điều này giải thích lý do cho sự cố. Tuy nhiên, tôi đã làm việc xung quanh vấn đề bằng cách chỉ mã hóa một tập con nhỏ hơn của các ký tự khi tài liệu HTML ở dạng unicode.

Các vấn đề liên quan