Sự khác biệt chính xác giữa Unicode và ASCII là gì?
ASCII có tổng cộng 128 ký tự (256 trong bộ mở rộng).
Có đặc điểm kích thước nào cho các ký tự Unicode không?
Sự khác biệt chính xác giữa Unicode và ASCII là gì?
ASCII có tổng cộng 128 ký tự (256 trong bộ mở rộng).
Có đặc điểm kích thước nào cho các ký tự Unicode không?
Câu trả lời:
ASCII định nghĩa 128 ký tự, ánh xạ tới các số 0 Hồi127. Unicode định nghĩa (ít hơn) 2 21 ký tự, tương tự, ánh xạ tới các số 0 mộc2 21 (mặc dù hiện tại không phải tất cả các số đều được gán và một số được bảo lưu).
Unicode là siêu ký tự của ASCII và các số 0 Hồi127 có cùng ý nghĩa với ASCII như trong Unicode. Ví dụ: số 65 có nghĩa là "vốn Latin 'A'".
Do các ký tự Unicode thường không vừa với một byte 8 bit, nên có nhiều cách lưu trữ các ký tự Unicode theo chuỗi byte, chẳng hạn như UTF-32 và UTF-8.
Hiểu tại sao ASCII và Unicode được tạo ra ngay từ đầu đã giúp tôi hiểu được sự khác biệt giữa hai loại này.
ASCII, nguồn gốc
Như đã nêu trong các câu trả lời khác, ASCII sử dụng 7 bit để thể hiện một ký tự. Bằng cách sử dụng 7 bit, chúng ta có thể có tối đa 2 ^ 7 (= 128) kết hợp riêng biệt * . Điều đó có nghĩa là chúng ta có thể đại diện tối đa 128 ký tự.
Chờ đã, 7 bit? Nhưng tại sao không phải 1 byte (8 bit)?
Bit cuối cùng (thứ 8) được sử dụng để tránh lỗi là bit chẵn lẻ . Điều này có liên quan nhiều năm trước.
Hầu hết các ký tự ASCII là các ký tự có thể in được của bảng chữ cái như abc, ABC, 123 ,? &!, V.v. Các ký tự khác là các ký tự điều khiển như trả về vận chuyển, nguồn cấp dữ liệu , tab, v.v.
Xem bên dưới biểu diễn nhị phân của một vài ký tự trong ASCII:
0100101 -> % (Percent Sign - 37)
1000001 -> A (Capital letter A - 65)
1000010 -> B (Capital letter B - 66)
1000011 -> C (Capital letter C - 67)
0001101 -> Carriage Return (13)
Xem bảng ASCII đầy đủ ở đây .
ASCII chỉ dành cho tiếng Anh.
Gì? Tại sao chỉ có tiếng Anh? Có rất nhiều ngôn ngữ ngoài kia!
Bởi vì trung tâm của ngành công nghiệp máy tính là ở Hoa Kỳ vào thời điểm đó. Kết quả là, họ không cần phải hỗ trợ các dấu hoặc các dấu khác như á, ü, ç, ñ, v.v. (còn gọi là dấu phụ ).
ASCII mở rộng
Một số người thông minh bắt đầu sử dụng bit thứ 8 (bit được sử dụng cho tính chẵn lẻ) để mã hóa nhiều ký tự hơn để hỗ trợ ngôn ngữ của họ (để hỗ trợ "é", ví dụ bằng tiếng Pháp). Chỉ cần sử dụng thêm một bit nhân đôi kích thước của bảng ASCII ban đầu để ánh xạ tối đa 256 ký tự (2 ^ 8 = 256 ký tự). Và không phải 2 ^ 7 như trước (128).
10000010 -> é (e with acute accent - 130)
10100000 -> á (a with acute accent - 160)
Tên của "ASCII này được mở rộng thành 8 bit chứ không phải 7 bit như trước" có thể chỉ được gọi là "ASCII mở rộng" hoặc "ASCII 8 bit".
Như @Tom đã chỉ ra trong bình luận của mình bên dưới, không có thứ gọi là " ASCII mở rộng ", đây là một cách dễ dàng để tham khảo thủ thuật 8 bit này. Có nhiều biến thể của bảng ASCII 8 bit, ví dụ, ISO 8859-1, còn được gọi là ISO Latin-1 .
Unicode, sự trỗi dậy
ASCII Extended giải quyết vấn đề cho các ngôn ngữ dựa trên bảng chữ cái Latinh ... còn những ngôn ngữ khác cần một bảng chữ cái hoàn toàn khác thì sao? Người Hy Lạp? Tiếng Nga? Tiếng Trung và thích?
Chúng tôi sẽ cần một bộ ký tự hoàn toàn mới ... đó là lý do đằng sau Unicode. Unicode không chứa mọi ký tự từ mọi ngôn ngữ, nhưng chắc chắn nó chứa một lượng ký tự khổng lồ ( xem bảng này ).
Bạn không thể lưu văn bản vào ổ cứng dưới dạng "Unicode". Unicode là một đại diện trừu tượng của văn bản. Bạn cần "mã hóa" biểu diễn trừu tượng này. Đó là nơi mã hóa phát huy tác dụng.
Mã hóa: UTF-8 so với UTF-16 so với UTF-32
Câu trả lời này thực hiện một công việc khá tốt trong việc giải thích những điều cơ bản:
UTF-8 sử dụng bộ ASCII cho 128 ký tự đầu tiên. Điều đó rất tiện lợi vì điều đó có nghĩa là văn bản ASCII cũng hợp lệ trong UTF-8.
Ghi nhớ:
Ghi chú:
Tại sao 2 ^ 7?
Điều này là rõ ràng đối với một số, nhưng chỉ trong trường hợp. Chúng tôi có bảy vị trí có sẵn được điền bằng 0 hoặc 1 ( Mã nhị phân ). Mỗi có thể có hai kết hợp. Nếu chúng ta có bảy điểm, chúng ta có 2 * 2 * 2 * 2 * 2 * 2 * 2 = 2 ^ 7 = 128 kết hợp. Hãy nghĩ về điều này như một khóa kết hợp với bảy bánh xe, mỗi bánh chỉ có hai số.
Nguồn: Wikipedia , bài đăng blog tuyệt vời này và Mocki nơi tôi ban đầu đăng bản tóm tắt này.
ASCII có 128 điểm mã, từ 0 đến 127. Nó có thể vừa với một byte 8 bit, các giá trị 128 đến 255 có xu hướng được sử dụng cho các ký tự khác. Với các lựa chọn không tương thích, gây ra thảm họa trang mã . Văn bản được mã hóa trong một trang mã không thể được đọc chính xác bởi một chương trình giả định hoặc đoán tại trang mã khác.
Unicode đã đến để giải quyết thảm họa này. Phiên bản 1 bắt đầu với 65536 điểm mã, thường được mã hóa thành 16 bit. Sau đó mở rộng trong phiên bản 2 lên 1,1 triệu điểm mã. Phiên bản hiện tại là 6.3, sử dụng 110.187 trong số 1,1 triệu điểm mã có sẵn. Điều đó không còn phù hợp với 16 bit nữa.
Mã hóa trong 16 bit là phổ biến khi v2 xuất hiện, được sử dụng bởi hệ điều hành Microsoft và Apple chẳng hạn. Và thời gian chạy ngôn ngữ như Java. Thông số kỹ thuật v2 đã đưa ra một cách để ánh xạ 1,1 triệu điểm mã đó thành 16 bit. Một mã hóa được gọi là UTF-16, một mã hóa có độ dài thay đổi trong đó một điểm mã có thể mất 2 hoặc 4 byte. Các điểm mã v1 gốc mất 2 byte, các điểm được thêm mất 4.
Một mã hóa độ dài biến khác rất phổ biến, được sử dụng trong các hệ điều hành và công cụ * nix là UTF-8, một điểm mã có thể mất từ 1 đến 4 byte, mã ASCII ban đầu mất 1 byte còn lại mất nhiều hơn. Mã hóa độ dài không biến duy nhất là UTF-32, mất 4 byte cho một điểm mã. Không thường xuyên được sử dụng vì nó khá lãng phí. Có những cái khác, như UTF-1 và UTF-7, bị bỏ qua rộng rãi.
Một vấn đề với mã hóa UTF-16/32 là thứ tự của các byte sẽ phụ thuộc vào tính chất cuối của máy tạo ra luồng văn bản. Vì vậy, thêm vào hỗn hợp UTF-16BE, UTF-16LE, UTF-32BE và UTF-32LE.
Việc có các lựa chọn mã hóa khác nhau này sẽ mang lại thảm họa trang mã ở một mức độ nào đó, cùng với các cuộc tranh luận sôi nổi giữa các lập trình viên mà lựa chọn UTF là "tốt nhất". Sự liên kết của họ với hệ điều hành mặc định khá nhiều vẽ các đường. Một biện pháp đối lập là định nghĩa của BOM, Dấu thứ tự Byte, một mật mã đặc biệt (U + FEFF, không gian chiều rộng bằng không) ở đầu luồng văn bản cho biết phần còn lại của luồng được mã hóa. Nó chỉ ra cả mã hóa UTF và endianess và trung tính với công cụ kết xuất văn bản. Thật không may, nó là tùy chọn và nhiều lập trình viên tuyên bố quyền bỏ qua nó vì vậy tai nạn vẫn còn khá phổ biến.
java cung cấp hỗ trợ cho Unicode tức là nó hỗ trợ tất cả các bảng chữ cái trên toàn thế giới. Do đó kích thước của char trong java là 2 byte. Và phạm vi là 0 đến 65535.
ASCII có 128 vị trí mã, được phân bổ cho các ký tự đồ họa và ký tự điều khiển (mã điều khiển).
Unicode có 1.114.112 vị trí mã. Khoảng 100.000 trong số chúng hiện đang được phân bổ cho các ký tự và nhiều điểm mã đã được tạo thành các ký tự không cố định (nghĩa là không được sử dụng để mã hóa bất kỳ ký tự nào) và hầu hết các điểm mã chưa được gán.
Những điều duy nhất mà ASCII và Unicode có điểm chung là: 1) Họ là những mã ký tự. 2) 128 vị trí mã đầu tiên của Unicode đã được xác định có cùng ý nghĩa như trong ASCII, ngoại trừ vị trí mã của các ký tự điều khiển ASCII chỉ được định nghĩa là ký hiệu điều khiển, với các tên tương ứng với tên ASCII của chúng, nhưng ý nghĩa của chúng là không được định nghĩa bằng Unicode.
Tuy nhiên, đôi khi, Unicode được đặc trưng (ngay cả trong tiêu chuẩn Unicode!) Là ASCII rộng rãi. Đây là một khẩu hiệu chủ yếu cố gắng truyền đạt ý tưởng rằng Unicode có nghĩa là một mã ký tự phổ quát giống như ASCII trước đây (mặc dù các tiết mục ký tự của ASCII là không đủ để sử dụng phổ biến), ngược lại với việc sử dụng các mã khác nhau trong hệ thống và ứng dụng khác nhau và cho các ngôn ngữ khác nhau.
Unicode như vậy chỉ định nghĩa kích thước lôgic của người dùng: Các ký tự: Mỗi ký tự có một số mã trong một phạm vi cụ thể. Các số mã này có thể được trình bày bằng cách sử dụng các mã hóa truyền khác nhau và trong nội bộ, trong bộ nhớ, các ký tự Unicode thường được biểu diễn bằng một hoặc hai đại lượng 16 bit cho mỗi ký tự, tùy thuộc vào phạm vi ký tự, đôi khi sử dụng một đại lượng 32 bit cho mỗi ký tự.
ASCII và Unicode là hai bảng mã ký tự. Về cơ bản, chúng là các tiêu chuẩn về cách thể hiện các ký tự khác nhau trong nhị phân để chúng có thể được viết, lưu trữ, truyền và đọc trên phương tiện kỹ thuật số. Sự khác biệt chính giữa hai là ở cách chúng mã hóa ký tự và số bit mà chúng sử dụng cho mỗi. ASCII ban đầu sử dụng bảy bit để mã hóa từng ký tự. Điều này sau đó đã được tăng lên thành tám với ASCII mở rộng để giải quyết sự bất cập rõ ràng của bản gốc. Ngược lại, Unicode sử dụng chương trình mã hóa bit biến đổi trong đó bạn có thể chọn giữa mã hóa 32, 16 và 8 bit. Sử dụng nhiều bit hơn cho phép bạn sử dụng nhiều ký tự hơn với chi phí cho các tệp lớn hơn trong khi ít bit hơn cho bạn lựa chọn hạn chế nhưng bạn tiết kiệm được nhiều không gian. Sử dụng ít bit hơn (nghĩa là
Một trong những lý do chính tại sao Unicode là vấn đề nảy sinh từ nhiều chương trình ASCII mở rộng không chuẩn. Trừ khi bạn đang sử dụng trang phổ biến, được sử dụng bởi Microsoft và hầu hết các công ty phần mềm khác, thì bạn có thể gặp phải sự cố với các ký tự của bạn xuất hiện dưới dạng hộp. Unicode hầu như loại bỏ vấn đề này vì tất cả các điểm mã ký tự đã được chuẩn hóa.
Một ưu điểm lớn khác của Unicode là ở mức tối đa, nó có thể chứa một số lượng lớn các ký tự. Do đó, Unicode hiện chứa hầu hết các ngôn ngữ viết và vẫn còn nhiều chỗ hơn. Điều này bao gồm các tập lệnh từ trái sang phải điển hình như tiếng Anh và thậm chí các tập lệnh từ phải sang trái như tiếng Ả Rập. Tiếng Trung, tiếng Nhật và nhiều biến thể khác cũng được thể hiện trong Unicode. Vì vậy, Unicode sẽ không được thay thế bất cứ lúc nào sớm.
Để duy trì khả năng tương thích với ASCII cũ hơn, vốn đã được sử dụng rộng rãi vào thời điểm đó, Unicode được thiết kế theo cách mà tám bit đầu tiên khớp với trang ASCII phổ biến nhất. Vì vậy, nếu bạn mở tệp được mã hóa ASCII bằng Unicode, bạn vẫn nhận được các ký tự được mã hóa chính xác trong tệp. Điều này tạo thuận lợi cho việc áp dụng Unicode vì nó giảm bớt tác động của việc áp dụng một tiêu chuẩn mã hóa mới cho những người đã sử dụng ASCII.
Tóm lược:
1.ASCII uses an 8-bit encoding while Unicode uses a variable bit encoding.
2.Unicode is standardized while ASCII isn’t.
3.Unicode represents most written languages in the world while ASCII does not.
4.ASCII has its equivalent within Unicode.
Lấy từ: http : //www.differenceb between.net/t Technology / software-t Technology / distference-b between-unicode-and-fascii / # ixzz4zEjnxPhs
Các số đã cho chỉ để lưu trữ 1 ký tự
Ngoài cách UTF là siêu bộ của ASCII, một điểm khác biệt nữa cần biết giữa ASCII và UTF là về mã hóa tệp đĩa và biểu diễn và lưu trữ dữ liệu trong bộ nhớ ngẫu nhiên. Các chương trình biết rằng dữ liệu đã cho nên được hiểu là chuỗi ASCII hoặc UTF bằng cách phát hiện mã đánh dấu thứ tự byte đặc biệt khi bắt đầu dữ liệu hoặc bằng cách giả sử từ ý định của lập trình viên rằng dữ liệu là văn bản và sau đó kiểm tra xem nó có phải là mẫu không trong một mã hóa văn bản hoặc khác.
Sử dụng ký hiệu tiền tố thông thường của 0x
dữ liệu thập lục phân, tham chiếu tốt cơ bản là văn bản ASCII bắt đầu bằng các giá trị byte 0x00
để 0x7F
biểu thị một trong các giá trị ký tự ASCII có thể . Văn bản UTF thường được chỉ định bằng cách bắt đầu với các byte 0xEF 0xBB 0xBF
cho UTF8. Đối với UTF16, bắt đầu byte0xFE 0xFF
hoặc 0xFF 0xFE
được sử dụng, với thứ tự cuối của các byte văn bản được chỉ định bởi thứ tự của byte bắt đầu. Sự hiện diện đơn giản của các giá trị byte không nằm trong phạm vi ASCII của các giá trị byte có thể cũng chỉ ra rằng dữ liệu có thể là UTF.
Có các dấu thứ tự byte khác sử dụng các mã khác nhau để biểu thị dữ liệu nên được hiểu là văn bản được mã hóa trong một tiêu chuẩn mã hóa nhất định.