Tôi đang viết một webservice sử dụng json để đại diện cho các tài nguyên của nó, và tôi có chút suy nghĩ về cách tốt nhất để mã hóa json. Đọc các json rfc (http://www.ietf.org/rfc/rfc4627.txt) rõ ràng là mã hóa ưa thích là utf-8. Nhưng rfc cũng mô tả một cơ chế thoát chuỗi để chỉ định các ký tự. Tôi giả định điều này thường được sử dụng để thoát khỏi các ký tự không phải ascii, do đó làm cho kết quả ascii utf-8 hợp lệ.Mã hóa ký tự JSON - UTF-8 có được hỗ trợ tốt bởi trình duyệt hay tôi nên sử dụng chuỗi thoát số?
Vì vậy, giả sử tôi có chuỗi json chứa ký tự unicode (mã-điểm) không phải là ascii. Liệu webservice của tôi chỉ cần mã hóa utf-8 và trả về nó, hay nó nên thoát khỏi tất cả những ký tự không phải ascii đó và trả về ascii thuần túy?
Tôi muốn các trình duyệt có thể thực hiện kết quả bằng cách sử dụng jsonp hoặc eval. Điều đó có ảnh hưởng đến quyết định không? Kiến thức của tôi về hỗ trợ javascript của trình duyệt khác nhau cho utf-8 là thiếu.
EDIT: Tôi muốn làm rõ rằng mối quan tâm chính của tôi về cách mã hóa kết quả thực sự là về việc xử lý kết quả trình duyệt. Những gì tôi đã đọc chỉ ra rằng các trình duyệt có thể nhạy cảm với mã hóa khi sử dụng JSONP nói riêng. Tôi đã không tìm thấy bất kỳ thông tin thực sự tốt về chủ đề, vì vậy tôi sẽ phải bắt đầu làm một số thử nghiệm để xem những gì sẽ xảy ra. Lý tưởng nhất là tôi chỉ muốn thoát khỏi vài ký tự được yêu cầu và chỉ utf-8 mã hóa kết quả.
Nếu đọc báo giá bạn cung cấp, bạn sẽ thấy bạn không cần phải thoát khỏi tất cả các ký tự unicode, chỉ một vài ký tự đặc biệt. Nhưng bạn được yêu cầu mã hóa các kết quả (tốt nhất là với utf-8). Vì vậy, câu hỏi là: "Tại sao bận tâm thoát các ký tự unicode bình thường nếu bạn đang mã hóa utf-8". – schickb
Ngoài ra, một chuỗi mã hóa ascii là một tập con tinh khiết của utf-8. Nếu tôi sử dụng thoát của json cho tất cả các ký tự không phải ascii, kết quả là ascii - và do đó utf-8. Các thư viện json khác nhau (như python simplejson) có các chế độ để ép buộc các kết quả ascii. Tôi đoán một lý do, giống như có thể thực hiện trong trình duyệt. – schickb
Khi bạn bận tâm thoát khỏi các ký tự unicode bình thường là trong các ngữ cảnh mà chúng là siêu ký tự, như chuỗi. (RFC đoạn tôi trích dẫn là về dây, xin lỗi, không rõ ràng về điều đó.) Bạn không cần phải làm ASCII đầu ra tất cả các thời gian; Tôi nghĩ rằng đó là nhiều hơn cho gỡ lỗi với các trình duyệt bị hỏng. – chaos