2009-03-31 82 views
281

sự khác biệt giữa là gì Unicode, UTF8, UTF7, UTF16, UTF32, ASCII, và ANSI mã hóa?Unicode, UTF, ASCII, ANSI định dạng khác nhau

Cách thức nào hữu ích cho người lập trình?

+5

rất liên quan: [UTF-8 so với Unicode] (http://stackoverflow.com/questions/643694/utf-8-vs-unicode) –

+0

Trang web tốt nhất để tham khảo sẽ là: http: // msdn. microsoft.com/en-us/library/dd374081(VS.85).aspx – RamSri

+0

http://www.tugay.biz/2016/07/what-is-ascii-and-unicode-and-character.html –

Trả lời

390

Đi xuống danh sách của bạn:

  • "Unicode" không phải là một mã hóa, mặc dù không may, rất nhiều tài liệu hướng dẫn không chính xác sử dụng nó để tham khảo bất cứ Unicode mã hóa mà hệ thống cụ thể sử dụng theo mặc định. Trên Windows và Java, điều này thường có nghĩa là UTF-16; ở nhiều nơi khác, nó có nghĩa là UTF-8. Đúng, Unicode đề cập đến các ký tự trừu tượng thiết lập chính nó, không phải bất kỳ mã hóa cụ thể.
  • UTF-16: 2 byte cho mỗi "đơn vị mã". Đây là định dạng gốc của các chuỗi trong .NET, và nói chung trong Windows và Java. Giá trị bên ngoài Basic Multilingual Plane (BMP) được mã hóa thành cặp thay thế. (Chúng tương đối hiếm khi được sử dụng - đó là một công việc tốt, vì rất ít nhà phát triển có được quyền, tôi nghi ngờ. Tôi rất nghi ngờ rằng tôi làm.)
  • UTF-8: Biến đổi mã hóa độ dài, 1-4 byte cho mỗi điểm mã. Các giá trị ASCII được mã hóa dưới dạng ASCII sử dụng 1 byte.
  • UTF-7: Thường được sử dụng để mã hóa thư. Rất có thể là nếu bạn nghĩ rằng bạn cần nó và bạn không làm mail, bạn đã sai. (Đó chỉ là trải nghiệm của tôi về những người đăng trong các nhóm tin tức - thư bên ngoài, nó thực sự không được sử dụng rộng rãi.)
  • UTF-32: Cố định mã hóa chiều rộng bằng 4 byte cho mỗi điểm mã. Đây không phải là rất hiệu quả, nhưng làm cho cuộc sống dễ dàng hơn bên ngoài BMP. Tôi có một lớp .NET Utf32String như một phần của thư viện MiscUtil của mình, nếu bạn muốn nó. (Nó không được kiểm tra kỹ lưỡng, hãy nhớ bạn.)
  • ASCII: Mã hóa byte đơn chỉ sử dụng 7 bit dưới cùng. (Mã Unicode điểm 0-127.) Không có dấu trọng âm, vv
  • ANSI: Không có mã hóa ANSI cố định nào - có rất nhiều mã. Thông thường khi mọi người nói "ANSI" họ có nghĩa là "miền địa phương/mã hóa mặc định cho hệ thống của tôi" được lấy thông qua Encoding.Default và thường là Windows-1252 nhưng có thể là các ngôn ngữ khác.

Có nhiều hơn trên my Unicode pagetips for debugging Unicode problems.

Tài nguyên lớn khác của mã là unicode.org chứa nhiều thông tin hơn bạn có thể làm việc theo cách của bạn - có thể bit hữu ích nhất là code charts.

+0

Tôi thực sự nghĩ về ANSI là [Code Page 437] (http://en.wikipedia.org/wiki/Code_page_437Code), vì đó là những gì ANSI Art đã sử dụng . Tuy nhiên, tôi không nghĩ rằng đó là có sẵn trong ASP.Net – lordscarlet

+2

Thuật ngữ "ANSI" khi áp dụng cho các trang mã 8-bit của Microsoft là một sự nhầm lẫn. Chúng được dựa trên các bản nháp được gửi để chuẩn hóa ANSI, nhưng bản thân ANSI không bao giờ tiêu chuẩn hóa chúng. Windows-1252 (trang mã thường được gọi là "ANSI") tương tự như ISO 8859-1 (Latin-1), ngoại trừ Windows-1252 có các ký tự có thể in trong phạm vi 0x80..0x9F, trong đó ISO 8859-1 có các ký tự điều khiển trong phạm vi đó. Unicode cũng có các ký tự điều khiển trong phạm vi đó. https://en.wikipedia.org/wiki/Windows_code_page –

+0

@JonSkeet, tôi có một số trang web gửi thư email. Hiện tại họ sử dụng UTF8. Tôi có nên suy nghĩ về việc thay đổi chúng trở lại UTF7? – jp2code

53

Một số đọc để giúp bạn bắt đầu trên bảng mã ký tự: Joel on Software: The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

Bằng cách này - ASP.NET có gì để làm với nó. Mã hóa là phổ quát.

+1

rất đọc thông tin, cảm ơn! –

+4

Đã trả lời ở đây 6 năm sau khi bài viết được viết. Tôi đọc nó 8 năm sau khi bài viết được viết. 14 năm sau và nó vẫn là một đọc tốt. Đó là hơn một nửa cuộc đời của tôi trước đây. Đáng kinh ngạc. –

+1

Bài viết tuyệt vời!Rất vui khi thấy tác giả đã làm những điều tốt đẹp khác trước khi tạo stackoverflow ... –

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