2011-04-14 35 views
6

Mã hóa trong XML là gì? Mã hóa thông thường được sử dụng là utf-8. Nó khác với mã hóa khác như thế nào? Mục đích của việc sử dụng nó là gì?Mã hóa trong XML là gì?

+0

Tham khảo W3C [khuyến nghị về mã hóa] (http://www.w3.org/TR/xml/#charencoding). – Nishant

+0

@Nantant: đó không thực sự là một giới thiệu tốt về chủ đề mã hóa ký tự nói chung. Và tôi nghĩ đó là câu hỏi thực sự. –

+0

Tôi vừa thêm các thông số XML như OP chỉ, 'mã hóa thông thường được sử dụng là UTF-8'. Nó không phải là một câu trả lời. – Nishant

Trả lời

8

Một character encoding định cách nhân vật được ánh xạ vào byte. Vì các tài liệu XML được lưu trữ và chuyển thành các luồng byte, điều này là cần thiết để biểu diễn các ký tự unicode tạo nên một tài liệu XML.

UTF-8 được chọn làm mặc định, bởi vì nó có nhiều ưu điểm:

  • nó tương thích với ASCII trong đó văn bản ASCII tất cả các giá trị mã hóa cũng có giá trị UTF-8 mã hóa (nhưng không nhất thiết phải là cách khác xung quanh !)
  • nó chỉ sử dụng 1 byte cho mỗi ký tự cho chữ "chung" (những người cũng tồn tại trong ASCII)
  • nó có thể đại diện cho tất cả các ký tự Unicode hiện

Mã hóa ký tự là một chủ đề tổng quát hơn chỉ là XML. UTF-8 là không phải bị hạn chế chỉ được sử dụng trong XML.

What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text là bài viết hay cung cấp thông tin tổng quan về chủ đề.

2

Tài liệu XML có thể chứa các ký tự không phải ASCII, như Na Uy æ ø å hoặc Pháp ê è é. Vì vậy, để tránh lỗi bạn đặt mã hóa hoặc lưu tệp XML dưới dạng Unicode.

XML Encoding Rules

1

Khi dữ liệu được lưu trữ hoặc chuyển dữ liệu chỉ là byte. Những byte cần một số giải thích. Người dùng có ngôn ngữ không phải tiếng Anh thường gặp một số vấn đề với các ký tự chỉ xuất hiện trong ngôn ngữ của họ. Những nhân vật đó được hiển thị một cách sai lầm thường xuyên.

Với XML có thông tin cách diễn giải ký tự byte của nó có thể được hiển thị đúng cách.

+3

Lưu ý rằng bản thân tiếng Anh cũng thường gặp khó khăn. [ASCII] (http://cstheory.stackexchange.com/questions/2066/difference-between-np-hard-and-np-complete) và [EBCDIC] (http://en.wikipedia.org/wiki/Extended_Binary_Coded_Decimal_Interchange_Code) ví dụ sử dụng mã hóa hoàn toàn khác nhau ngay cả đối với các ký tự tiếng Anh "bình thường". Mã hóa không chỉ dành cho "phần còn lại của thế giới" ;-) –

+2

@ Joachim: Rất nhiều đồng ý. Khái niệm siêu bảo thủ và phản động rằng ASCII đủ tốt cho ông bà của chúng ta nên nó đủ tốt cho chúng ta là một cái nhìn rất lố bịch - và không có thật. Nhưng khủng khiếp phổ biến. – tchrist

4

Khi máy tính được tạo lần đầu, chúng chủ yếu chỉ làm việc với các ký tự được tìm thấy bằng ngôn ngữ tiếng Anh, dẫn đến tiêu chuẩn 7-bit US-ASCII.

Tuy nhiên, có rất nhiều ngôn ngữ viết khác nhau trên thế giới và các cách phải được tìm thấy để có thể sử dụng chúng trong máy tính.

Cách đầu tiên hoạt động tốt nếu bạn giới hạn bản thân bằng một ngôn ngữ nhất định, sử dụng mã hóa văn hóa cụ thể, chẳng hạn như ISO-8859-1, có thể đại diện cho các ký tự ngôn ngữ latin-châu Âu trên 8 bit hoặc GB2312 cho ký tự tiếng Trung. Cách thứ hai phức tạp hơn một chút, nhưng cho phép lý thuyết đại diện cho mọi nhân vật trên thế giới, đó là tiêu chuẩn Unicode, trong đó mỗi ký tự từ mọi ngôn ngữ đều có một mã cụ thể. Tuy nhiên, với số lượng ký tự hiện có cao (109.000 trong Unicode 5), các ký tự unicode thường được biểu diễn bằng cách sử dụng biểu diễn ba byte (một byte cho mặt phẳng Unicode và hai byte cho mã ký tự.

Để tối đa khả năng tương thích với mã hiện có (một số vẫn đang sử dụng văn bản trong ASCII), mã hóa chuẩn UTF-8 được tạo ra như một cách để lưu trữ các ký tự Unicode, chỉ sử dụng lượng không gian tối thiểu, như được mô tả trong câu trả lời của Joachim Sauer.Vì vậy, thường thấy các tệp được mã hóa với các bộ ký tự cụ thể như ISO-8859-1 nếu tệp chỉ được chỉnh sửa hoặc chỉ đọc bởi phần mềm (và mọi người) chỉ hiểu những ngôn ngữ này và UTF-8 khi có sự cần thiết phải có khả năng tương thích cao và độc lập với văn hóa. Xu hướng hiện tại là dành cho UTF-8 để thay thế các bộ ký tự khác, mặc dù nó cần làm việc từ các nhà phát triển phần mềm, vì chuỗi UTF-8 phức tạp hơn để xử lý hơn các chuỗi ký tự có chiều rộng cố định.

+1

Unicode cũng cần thiết cho các loại dấu chấm câu và ký hiệu, như '¢ £ €' và “dấu ngoặc kép” và như vậy. Nó không cần phải khó khăn hơn để làm việc với Unicode nếu một ngôn ngữ lập trình bắt đầu bằng Unicode làm bộ ký tự cơ sở của nó; thì bạn không phải lo lắng về mã hóa có chiều rộng thay đổi - hoặc không nên. – tchrist

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