UTF-8 và UTF-16

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

UTF-8 và UTF-16

Bài gửi by Admin on 21/2/2011, 23:28

dq_ninh
http://www.ddth.com/showthread.php?t=83685

Tôi xin gửi đến một ít kinh nghiệm lâm sàng về UTF-8 và UTF-16.

Trước hết, xin nói sơ qua về UTF-8 và UTF-16. UTF-8 là một font chữ thuộc dạng biến, tức là một ký tự có thể dùng 1 byte đến 8 bytes. Trong khi đó, UTF-16 là một phong chữ thuộc dạng cố định, mỗi ký tự dùng 2 bytes.

Do đó, UTF-8 có thể dùng cho tất cả mọi ngôn ngữ trên thế giới, đặc biệt cho các ngôn ngữ không dùng mẫu tự Latin của các quốc gia như trung quốc, Hàn quốc, Nhật bản, v.v...

Chỉ với yếu tố kể trên, đã cho chúng ta thấy, UTF-8 có lợi điểm hơn, là có thể hổ trợ tất cả mọi ngôn ngữ trên thế giới. Với 8-bytes, UTF-8 có thể hổ trợ cả ngàn tỷ mẫu tự. Ngược lại, UTF-16 chỉ có thể hổ trợ tối đa là 65.536 ký tự.

Tuy nhiên, như tôi đã đề cập đến nhiều lần, chúng ta đang sống trên một thế giới mà thuyết tương đối luôn luôn có vị thế tuyệt đối. Được cái này thì mất cái kia. Để đổi lấy cái lợi thế có thể hổ trợ cho tất cả các ngôn ngữ trên thế giới, UTF-8 đã phải mất điều gì? Đó chính là tốc độ xử lý.

Tôi đã từng viết code cho những phần mềm hổ trợ cho nhiều ngôn ngữ trên thế giới. Tuy nhiên, vẫn chưa bao giờ phải dùng đến UTF-8, mà chỉ dùng UTF-16 hoặc UTF-32. Các phần mềm cũa các công ty tôi đã làm thường thường chỉ hổ trợ cho cộng đồng Âu Châu, Châu Mỹ Latin, và Nhật Bản.

Ví dụ:
Gần đây nhất, tôi viết phần mềm cho một công ty có sản phẩm độc quyền trên thị trường. Sản phẩm này được dùng tại các nước ở Âu Châu, châu Mỹ Latin, và Nhật Bản. Cũng chưa phải dùng đến UTF-8, cho đến một ngày nọ, đột nhiên có một vị "lão thành" architect đưa ra trong buổi họp là phải thống nhất dùng UTF-8 chuẩn cho tất cả những files/documents mà các sản phẩm của hãng đã, đang, và sẽ xử dụng tới, trong đó có những log files, XML files. Dĩ nhiên, sau nhiều ngày bàn cãi, tìm tòi dữ liệu, tất cả chúng tôi đều công nhận là nên dùng UTF-8.

Và tôi, cũng như nhiều bạn đồng nghiệp khác, đã bắt tay vào việc sửa code để hoán chuyển các files/documents từ UTF-16/UTF-32 qua UTF-8. Việc sửa code cũng giản dị và không có gì là khó khăn. Chưa đầy một tháng sau, tôi hoan hỉ trình làng phiên bản mới của phần mềm mà nhóm của tôi chịu trách nhiệm. Cẩn thận hơn, trong phiên bản này, tôi đã sửa phần cài đặt (configuration) để người xử dụng có thể chọn dùng UTF-8 hoặc UTF-16. Có nghĩa là, với phiên bản mới, người sử dụng có thể chọn cho phần mềm có thể viết ra log files, XML files, và những documents linh tinh khác với hai loại font chữ: UTF-8 và UTF-16.

Kết quả vô cùng...chua xót. Nhóm QA chuyên thử nghiệm những phiên bản mới trước khi tung ra thị trường đã không chấp nhận phiên bản mới với UTF-8. Lý do: phần mềm bị đóng băng (hung up) mỗi khi dùng UTF-8 cho log files, đặc biệt trong trường hợp có nhiều connections. Sau cùng, để phiên bản mới có thể tung ra thị trường đúng ngày tháng ấn định, tôi đã phải xóa tất cả những code mới cho UTF-8.

Tại sao phần mềm lại bị đóng băng khi dùng UTF-8? Sản phẩm chúng tôi viết là một phần mềm chạy trên máy chủ, và có thể có cả ngàn connections từ những máy con. Khi có nhiều connections, phần mềm phải viết thật nhiều vào log files. Khi dùng UTF-8, mỗi ký tự đều phải có thêm code để tính toán xem ký tự đó có bao nhiêu bytes. Tuy rằng sự tính toán đó chỉ là 1 phần triệu của một giây đồng hồ, nhưng nếu mỗi giây đồng hồ có cả chục ngàn "messages" cần phải viết vào log file, thì tốc độ bị ảnh hưởng vô cùng ghê gớm.

Trong tương lai, khi tất cả các đĩa cứng được thay thế bằng các đĩa điện tử (không còn dùng mechanic reading head), thì UTF-8 có thể dùng được. Nhưng hiện tại, có những trường hợp không thể dùng được.

Riêng các phần mềm, sản xuất tại Mỹ cũng như Việt Nam hoặc nhiều nước khác, câu hỏi nên được đặt ra là "sản phẩm có bán được cho các nước như Trung Quốc, Thái lan, Lào, Campuchia không?" Nếu câu trả lời là không, thì UTF-8 chưa hẳn là một chọn lựa tốt.


Được sửa bởi Admin ngày 21/2/2011, 23:37; sửa lần 1.

Admin
Admin

Tổng số bài gửi : 2046
Points : 3620
Reputation : 0
Join date : 25/10/2009
Đến từ : http://casablanca.top-forum.net

Xem lý lịch thành viên http://casablanca.top-forum.net

Về Đầu Trang Go down

Re: UTF-8 và UTF-16

Bài gửi by Admin on 21/2/2011, 23:31

UTF-16, với 16 bits, có thể chứa được hơn 65 ngàn ký tự, có thể dùng cho bất cứ một ngôn ngữ nào. Nhưng ở đây bạn nên nhớ rằng, UTF dùng để chứa đựng phong chữ cho nhiều ngôn ngữ trên thế giới, chứ không phải cho riêng một ngôn ngữ nào. Do đó, với 65 ngàn ký tự, thì không đủ để chứa tất cả mọi ký tự trên thế giới.

Muốn có những ký tự đặc biệt của một ngôn ngữ vào phong chữ UTF-16 thì phải đăng ký, và người ta sẽ dành riêng một số những mã số cho những ký tự của quốc gia đó. Chậm chân thì hết...mã số. Cho nên, trong UTF-16, cũng có thể có những ký tự không phải là Latin.

Về vấn đề tiết kiệm bộ nhớ thì cũng không hẳn là đúng. Tiếng Anh không có dấu. Do đó, khi lưu một văn kiện bằng tiếng Anh dùng UTF-8, thì mỗi ký tự chỉ tốn có một byte. Thành thử ra, nếu so sánh hai văn bản giống y hệt nhau bằng tiếng Anh, một văn bản dùng UTF-8, một văn bản dùng UTF-16, thì văn bản UTF-16 lớn gấp hai lần văn bản UTF-8. Nhưng nếu hai văn bản tiếng Nhật giống y hệt nhau, một dùng UTF-8, một dùng UTF-16, thì văn bản UTF-8 sẽ lớn hơn văn bản UTF-16.

Nhưng về tốc độ xử lý, thì dù lớn hay nhỏ, dùng UTF-8 sẽ luôn luôn chậm hơn.

Admin
Admin

Tổng số bài gửi : 2046
Points : 3620
Reputation : 0
Join date : 25/10/2009
Đến từ : http://casablanca.top-forum.net

Xem lý lịch thành viên http://casablanca.top-forum.net

Về Đầu Trang Go down

Re: UTF-8 và UTF-16

Bài gửi by Admin on 21/2/2011, 23:37

conmalele

Trình test của công ty gì đó thì khác có tầm, nhưng trình code thì lại thua cả trăm bậc, chắc là lần đầu viết các enterprise soft.

Nhớ hồi mấy cu Mẽo khóc cái vụ tương tự, anh đưa 2 chiêu cái tụi nó nín như còn nít được mẹ cho bú sữa Vài keyword gợi ý nhé: escape, spit + ASCII only, no UTF-xx

hình như UTF-8 được thiết kế ra là để tương thích với bộ mã ASCII

Admin
Admin

Tổng số bài gửi : 2046
Points : 3620
Reputation : 0
Join date : 25/10/2009
Đến từ : http://casablanca.top-forum.net

Xem lý lịch thành viên http://casablanca.top-forum.net

Về Đầu Trang Go down

Re: UTF-8 và UTF-16

Bài gửi by Sponsored content Today at 01:01


Sponsored content


Về Đầu Trang Go down

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang


 
Permissions in this forum:
Bạn không có quyền trả lời bài viết