Ý nghĩa của - <? Xml version = “1.0” encoding = “utf-8”?>


102

Tôi mới làm quen với XML và tôi đang cố gắng hiểu những điều cơ bản. Tôi đã đọc dòng bên dưới trong "Học XML", nhưng tôi vẫn chưa hiểu rõ. Ai đó có thể chỉ cho tôi một cuốn sách hoặc trang web giải thích những điều cơ bản này rõ ràng không?

Từ việc học XML :

Khai báo XML mô tả một số thuộc tính chung nhất của tài liệu, cho bộ xử lý XML biết rằng nó cần một bộ phân tích cú pháp XML để diễn giải tài liệu này.

Điều đó có nghĩa là gì?

Tôi hiểu xml versionphần này - cả tài liệu và người dùng tài liệu đều phải "nói chuyện" trong cùng một phiên bản XML. Nhưng về encodingphần thì sao? Tại sao điều đó lại cần thiết?



Câu trả lời:


125

Để hiểu thuộc tính "encoding", bạn phải hiểu sự khác biệt giữa byteký tự .

Hãy coi byte là các số từ 0 đến 255, trong khi các ký tự là những thứ như "a", "1" và "Ä". Tập hợp tất cả các ký tự có sẵn được gọi là bộ ký tự .

Mỗi ký tự có một chuỗi một hoặc nhiều byte được sử dụng để đại diện cho nó; tuy nhiên, số lượng và giá trị chính xác của các byte phụ thuộc vào bảng mã được sử dụng và có nhiều bảng mã khác nhau.

Hầu hết các bảng mã dựa trên một bộ ký tự và mã hóa cũ được gọi là ASCII, là một byte cho mỗi ký tự (thực tế, chỉ có 7 bit) và chứa 128 ký tự bao gồm rất nhiều ký tự phổ biến được sử dụng trong tiếng Anh Mỹ.

Ví dụ, đây là 6 ký tự trong bộ ký tự ASCII được đại diện bởi các giá trị từ 60 đến 65.

Extract of ASCII Table 60-65
╔══════╦══════════════╗
║ Byte ║  Character   ║
╠══════╬══════════════║
║  60  ║      <       ║
║  61  ║      =       ║
║  62  ║      >       ║
║  63  ║      ?       ║
║  64  ║      @       ║
║  65  ║      A       ║
╚══════╩══════════════╝

Trong tập hợp ASCII đầy đủ, giá trị thấp nhất được sử dụng là 0 và cao nhất là 127 (cả hai đều là ký tự điều khiển ẩn).

Tuy nhiên, một khi bạn bắt đầu cần nhiều ký tự hơn ASCII cơ bản cung cấp (ví dụ: các chữ cái có dấu, ký hiệu tiền tệ, ký hiệu đồ họa, v.v.), ASCII không phù hợp và bạn cần thứ gì đó mở rộng hơn. Bạn cần nhiều ký tự hơn (một bộ ký tự khác) và bạn cần một mã hóa khác vì 128 ký tự không đủ để khớp tất cả các ký tự. Một số mã hóa cung cấp một byte (256 ký tự) hoặc tối đa sáu byte.

Theo thời gian, rất nhiều bảng mã đã được tạo ra. Trong thế giới Windows, có CP1252, hoặc ISO-8859-1, trong khi người dùng Linux có xu hướng ưa chuộng UTF-8. Java sử dụng UTF-16 nguyên bản.

Một chuỗi các giá trị byte cho một ký tự trong một bảng mã có thể thay cho một ký tự hoàn toàn khác trong một bảng mã khác, hoặc thậm chí có thể không hợp lệ.

Ví dụ, trong ISO 8859-1 , â được đại diện bởi một byte có giá trị 226, trong khi UTF-8 đó là hai byte: 195, 162. Tuy nhiên, trong ISO 8859-1 , 195, 162sẽ là hai ký tự, Ã, ¢ .

Hãy nghĩ về XML không phải là một chuỗi các ký tự mà là một chuỗi các byte.

Hãy tưởng tượng hệ thống nhận XML sẽ nhìn thấy các byte 195, 162. Làm sao nó biết được đây là những ký tự nào?

Để hệ thống diễn giải các byte đó là các ký tự thực tế (và hiển thị chúng hoặc chuyển đổi chúng sang một kiểu mã hóa khác), nó cần biết cách mã hóa được sử dụng trong XML.

Vì hầu hết các bảng mã phổ biến đều tương thích với ASCII, theo như các ký tự và ký hiệu chữ cái cơ bản, trong những trường hợp này, bản thân khai báo có thể tránh được việc chỉ sử dụng các ký tự ASCII để cho biết mã hóa là gì. Trong các trường hợp khác, trình phân tích cú pháp phải thử và tìm ra mã hóa của khai báo. Vì nó biết khai báo bắt đầu với <?xmlnó, nên việc này sẽ dễ dàng hơn rất nhiều.

Cuối cùng, versionthuộc tính chỉ định phiên bản XML, trong đó có hai phiên bản hiện tại (xem Wikipedia phiên bản XML . Có sự khác biệt nhỏ giữa các phiên bản, vì vậy trình phân tích cú pháp XML cần biết nó đang xử lý những gì. Trong hầu hết các trường hợp (đối với tiếng Anh loa), phiên bản 1.0 là đủ.


9
"Bản thân tiêu đề sử dụng bảng mã ASCII": Tôi nghĩ rằng bạn đang đề cập đến khai báo XML. Nó được mã hóa giống như phần còn lại của tài liệu; UTF-16 hoặc không. Bộ xử lý XML có thể thực hiện một vài thử nghiệm cho đến khi nó có thể đọc được đặc tả mã hóa.
Tom Blodget

1
Tôi có ấn tượng rằng phần mở đầu / phần mở đầu phải được mã hóa theo UTF-8 và điều đó cho trình phân tích cú pháp biết cách chuyển đổi các byte còn lại (tài liệu XML thực tế) sang mã hóa chính xác. Sai một lần nữa! :-)
Kelly Beard

5
Đây là bài đọc được gợi ý: joelonsoftware.com/2003/10/08/…
Sudip Bhandari

26

Tất cả các tài liệu XML không cần phải khai báo XML; tuy nhiên, các tác giả tài liệu XHTML được khuyến khích sử dụng các khai báo XML trong tất cả các tài liệu của họ. Khai báo như vậy là bắt buộc khi mã hóa ký tự của tài liệu không phải là UTF-8 hoặc UTF-16 mặc định và không có mã hóa nào được xác định bởi một giao thức cấp cao hơn. Đây là một ví dụ về tài liệu XHTML. Trong ví dụ này, khai báo XML được bao gồm.

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE html 
 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>Virtual Library</title>
  </head>
  <body>
    <p>Moved to <a href="http://example.org/">example.org</a>.</p>
 </body>
</html>

Vui lòng tham khảo các tiêu chuẩn W3 cho XML .


4
xml liên kết đến xhtml. ý của bạn là liên kết đến xml w3.org/TR/xml hay bạn có ý đặt tên liên kết là xhtml?
jrwren

Xhtml đề cập đến tài liệu xml. Khai báo Loại tài liệu không bắt buộc đối với xml định dạng tốt.
xvan

"Vui lòng tham khảo các tiêu chuẩn W3 cho XML." IOW, hãy đọc câu hỏi thường gặp về faqing, đây là một tài liệu dài. Tại sao mọi người không thể giải thích đơn giản dấu "?" không và tại sao nó ở đó ???
Bless Geek

3

Đây là phần mở đầu tùy chọn XML .

  • version="1.0" có nghĩa là đây là tiêu chuẩn XML mà tệp này tuân theo
  • encoding="utf-8" nghĩa là tệp được mã hóa bằng mã hóa Unicode UTF-8


2

Ai đó có thể chỉ cho tôi một cuốn sách hoặc trang web giải thích những điều cơ bản này rõ ràng không?

Bạn có thể kiểm tra Hướng dẫn XML này với các ví dụ.

Nhưng về phần mã hóa thì sao? Tại sao điều đó lại cần thiết?

W3C cung cấp giải thích về mã hóa:

"Bộ ký tự tài liệu cho XML và HTML 4.0 là Unicode (hay còn gọi là ISO 10646). Điều này có nghĩa là trình duyệt HTML và bộ xử lý XML sẽ hoạt động như thể chúng sử dụng Unicode nội bộ. Nhưng không có nghĩa là tài liệu phải được truyền bằng Unicode. Miễn là máy khách và máy chủ đồng ý về cách mã hóa, họ có thể sử dụng bất kỳ bảng mã nào có thể chuyển đổi sang Unicode ... "


-1

Khai báo XML trong bản đồ tài liệu bao gồm:

The version number, ?xml version="1.0"?. 

Đây là điều bắt buộc. Mặc dù con số có thể thay đổi đối với các phiên bản XML trong tương lai, 1.0 là phiên bản hiện tại.

Khai báo mã hóa,

encoding="UTF-8"?

Đây là tùy chọn. Nếu được sử dụng, khai báo mã hóa phải xuất hiện ngay sau thông tin phiên bản trong khai báo XML và phải chứa một giá trị đại diện cho một mã hóa ký tự hiện có.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.