IT Staff

Blog về chuyên ngành IT

Bài chỉ dẫn ngắn nhất về bộ mã ký tự

leave a comment »

by Xavier Nguyen on Wednesday, August 18, 2010 at 7:27pm

/*

*

* Nguồn WEB BUILDER ZONE

*

*/

Bởi Giorgio Sironi – Thứ hai, 16-08-2010

 

 

Khi “Oracle tạo ra bảng chữ cái cyrillic” và lây lan một cách tinh nghịch trên diện rộng Internet, dường như đó là yếu tố mà Google đã loại bỏ Oracle ra khỏi chỉ mục của mình. Một trò bịp đơn giản, chính xác là việc hoàn tất bộ mã ký tự Unicode Cyrillic bằng cách sao chép từ bộ mã ký tự Latin. Đây là một kiểu “tấn công”, nếu chúng ta thích gọi vậy, thì sẽ không có sự tồn tại trong bảng UFT-8 era trước đây. Tuy nhiên các nhà phát triển web phải chống lại một số bộ nền các ký tự được tạo ra để không bị tấn công bởi những trường hợp giản đơn này. Khi đó, chúng tôi sẽ tạo ra những trang web hợp lệ, tránh sự nhầm lẫn bảng mã, thế là nội dung cho mỗi máy khách trên thế giới sẽ được thể hiện một cách đúng đắn.

 

 

Các bộ ký tự và bảng mã

 

Trong phạm vi của bài viết này, là một số thông tin về các bộ ký tự, sự nối kết logic về các ký tự được sử dụng bởi các máy tính theo nguyên lý Von Neumann. Chúng liên kết các ý tưởng giống như khái niệm về một ký tự C hoặc một khoảng trắng, đến các dấu chấm lệnh, các con số duy nhất.

 

Cùng với khái niệm về bộ ký tự, chúng tôi phải xem xét định nghĩa về bảng mã ký tự – một bảng mã không trùng lặp. Một bảng mã ký tự được biểu hiện vật lý cho các ký tự, thường là một dãy tuần tự các bit.

 

Bộ ký tự và bảng mã không được trình bày trong thời đại lịch sử nghiêm khắc, nhưng tốt hơn trong việc sắp xếp phức tạp. Một vài trong số đó, các ý tưởng của việc thiết lập và mã hóa đều giống nhau (ASCII), trong khi với những cái khác chúng đều có sự khác nhau tí xíu (Unicode và UTF-8).

 

 

ASCII

 

Ban đầu, chỉ có ASCII. Nó được giới thiệu và được xem như tiêu chuẩn vào năm 1963, và nó sử dụng chỉ 7 bits để thể hiện một ký tự. ASCII kết nối 128 ký tự, và hiện tại biểu hiện với 8 bit phần từ giống như byte theo cách đơn giản.

 

ASCII có tất cả các ký tự cần thiết để viết các cụm từ bằng tiếng Anh. Nó không chỉ có những ký tự cho bản in mà còn có các ký tự điều khiển, lúc đầu sử dụng để điều khiển các thiết bị như máy in và bây giờ được lược bỏ bớt ngoại trừ các ký tự đặc biệt như 0A (hoặc ếu bạn thích, 10d: dòng mới). Nó được gửi đến máy in và ra lệnh để mở rộng 1 bảng tính, và ngày nay nó phân cách dòng của một tài liệu văn bản thuần.

 

 

ISO-8859-X

 

Câu hỏi kế tiếp trong việc chuẩn hóa bộ ký tự là: Làm cách nào để chúng ta phân phối các ký tự để sử dụng trong các ngôn ngữ và bảng chữ cái khác?

 

Ví dụ như ngôn ngữ chính của tôi, Ý, cần các ký tự trọng âm giống như àè. Các từ tiếng Đức hiển thị các dấu phụ trong một số trường hợp, như ö.

 

Nhiều bộ ký tự đã được ra đời, và chúng ta bắt đầu gán những ý nghĩa khác nhau cho các bytes dựa trên bộ ký tự đã định nghĩa.ASCII ngày nay không phải là sự lựa chọn duy nhất nữa, nhưng giải pháp này lại sinh ra một vấn đề khác: việc nhận dạng bộ ký tự của tài liệu.

 

Sự phát sinh các chuẩn này, ISO-8859-1 (được biết là Latin 1) chiếm lĩnh gần như tất cả các nhu cầu ngôn ngữ châu Âu. ISO-8859-15 thay vì thay đổi một số cho các ký tự đã có đến các ký hiệu mới như ký hiệu tiền tệ Euro ().

 

 

Unicode

 

Mỗi giải pháp đều mang lại những vấn đề mới. Câu hỏi tiếp theo là: làm cách nào với các tài liệu được viết bằng tiếng Mandarin Trung Quốc hoặc ngôn ngữ Nhật bản – ngôn ngữ có hàng ngàn các ký tự?

 

Bảng mã sử dụng nhiều byte được giới thiệu, và chúng sử dụng nhiều hơn 1 byte để biểu hiệnn mỗi ký tự. Vượt xa kích thước đưa ra, cái mà Sahnnon nói rằng chúng ta không thể giải quyết được, các chuỗi nhiều byte sẽ có vấn đề với các chuỗi hàm trong tất cả các ngôn ngữ lập trình thậm chí cho đến ngày hôm nay. Cơ bản là, bạn phải chắc chắn rằng các chuỗi hàm có tiêu chuẩn làm việc dựa trên các byte đơn lẻ, đừng chia các byte có liên quan đến cùng ký tự trong suốt quá trình thao tác.

 

PHP có một tập hợp các chuỗi hàm chuyên biệt hóa, mở rộng nhiều byte, thường được dùng để giải quyết vấn đề cho đến khi sự hỗ trợ này sẽ được kết hợp vào ngôn ngữ.

 

Theo cách đó, ký tự có nhiều byte được khuyếch tán mạnh nhất là Unicode, nó chứa mỗi một ký tự mà bạn đã từng hình dung, từ những nét chạm Arabic đến Hebrew đến Angul hoặc Sanskrit. Hoặc những chữ viết tượng hình.

 

 

UTF-8

 

Lần nữa, những vấn đề mới bắt đầu xuất hiện. Như là tất cả các tài liệu trước đây của chúng ta đã được lưu với ISO-8859-1, hoặc bảng mã ASCII. Có cách nào để chúng ta có thể chuyển đổi chúng sang sử dụng tuần tự 4-bytes không?

 

Hơn nữa, 4 bytes cho mỗi ký tự sẽ rất nặng cho băng thông: nó bị làm giảm bởi 75% nhân tố cho việc truyền dữ liệu. Lúc đó có lẽ bạn và tôi sẽ không cần ngôn ngữ Trung Hoa, tại sao chúng ta chịu sự gánh nặng dùm người khác nhỉ?

 

Và UTF-8 đã được phát triển: một bảng mã cho Unicode, gồm những ký tự phổ biến nhất được thể hiện với 1 byte tuần tự (sao chép từ và tương thích với ASCII), và những ký tự khác với mã dài hơn 4 bytes. Các chữ cái Nhật hoặc ký tự với khả năng phân biệt các dấu câu và dấu nhấn với mã dài hơn, nhưng chúng vượt xác các chữ cái Latin. Thậm chí bài viết này được viết bởi người Nhật, tất cả các thẻ HTML vẫn sẽ phải dùng các ký tự Latin.

 

UTF-8 rất thông minh trong việc sử dụng mã khoảng trắng. Mỗi byte cho chúng ta biết vai trò của nó, bằng việc sắp xếp xem nơi nó rơi vào: ví dụ, nó nằm giữa 00 và 7F thì là của ASCII, trong khi nếu nó rơi vào từ F0 đến F4 thì là bắt đầu của một 4 bytes tuần tự, và vân vân.

 

Việc dùng UTF-8 cho phép chúng ta thoải mái trong các ngôn ngữ khác nhau trên cùng một trang hoặc tương tác qua lại, luôn luôn với cùng mã ký tự. Mỗi ký tự sẽ được thể hiện ngắn ngắn đến mức có thể.

 

 

Chỉ định bộ ký tự

 

Phần quan trọng nhất bây giờ là: từ khi có nhiều bảng mã xuất hiện, cái nào tôi nên sử dụng để cấu hình cho trang web của tôi và máy khách có thể hiểu chúng? Câu trả lời rất đơn giản: mỗi lần bạn có thay đổi gì đó, trình duyệt sẽ không phải lấy bất kỳ giá trị mặc định nào cho nó.

 

Ngày nay, UTF-8 thường là sự lựa chọn đúng. Nhưng chúng ta muốn trình duyệt thể hiện tài liệu bằng việc giả lập chúng theo dạng UTF-8 và không theo dạng bảng mã cùi bắp, và chúng ta phải cho chúng biết.

 

  • Nơi đầu tiên để chỉ định bảng mã trong trình soạn thảo của bạn, khi bạn viết mã nguồn hoặc dịch các tập tin. Và thể hiện đúng bắt đầu ở đây.
  • Nơi kế tiếp là thẻ meta HTML: <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″> là nguyên tắc cơ bản.
  • Vùng metadata hữu ích khác nữa là tiêu đề HTTP, Content-Type.
  • Các bảng cơ sở dữ liệu “phải” tương thích với mã ký tự của các ứng dụng. Nhiều lần điều này bị bỏ qua khi chúng tôi chú tâm vào phía máy chủ.
  • Cũng vậy các form HTML có một thuộc tính là accept-charset, nhưng chúng thuờng ẩn bên trong mã ký tự của tài liệu.
  • Cuối cùng, chuỗi UTF-8 nên được mã URL (http://en.wikipedia.org/wiki/Percent-encoding) khi việc chuyển đổi các giá trị Unicode thông qua GET hoặc POST. Các trình duyệt sẽ thực hiện điều này giúp chúng ta khi cần thiết, và cố gắng giữ chúng hiển thị bởi các ký tự thực thậm chí trong khi chúng đang gửi một yêu cầu cho một URL như http://www.google.com/search?q=%D0%BEr%D0%B0c%D0%86%D0%B5

Đây là bài viết ngắn nói về các bộ ký tự cho các nhà phát triển web. Chủ đề này rất sâu và quyến rũ, nên tôi khuyến khích bạn tìm hiểu thêm về nó, nhưng bạn sẽ không cần thiết phải tìm hiểu toàn bộ đâu, khi mà thông tin thiết yếu cũng đủ để bạn nghiên cứu thật nhiều. Tôi hy vọng rằng một ngày nào đó cơn ác mộng về sự xung đột giữa các bộ ký tự sẽ đến hồi kết thúc.

 

/*

*

* Nguồn WEB BUILDER ZONE

*

*/

 

 

Standard ASCII Table
Extended ASCII Table
· · Share · Delete

  • You like this.



Written by Xavier

Tháng Một 24, 2011 lúc 6:19 chiều

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: