Helpex - Trao đổi & giúp đỡ Đăng nhập
331

Sự khác biệt giữa UTF-8ISO-8859-1 là gì?

331 hữu ích 0 bình luận 341k xem chia sẻ
281

UTF-8 là một mã hóa đa bào có thể đại diện cho bất kỳ ký tự Unicode nào. ISO 8859-1 là mã hóa một byte có thể biểu thị 256 ký tự Unicode đầu tiên. Cả hai đều mã hóa ASCII chính xác theo cùng một cách.

281 hữu ích 1 bình luận chia sẻ
115

Wikipedia giải thích cả hai cách hợp lý: UTF-8 so với Latin-1 (ISO-8859-1). Trước đây là mã hóa có độ dài thay đổi, mã hóa độ dài cố định một byte sau. Latin-1 chỉ mã hóa 256 điểm mã đầu tiên của bộ ký tự Unicode, trong khi UTF-8 có thể được sử dụng để mã hóa tất cả các điểm mã. Ở cấp độ mã hóa vật lý, chỉ các điểm mã 0 - 127 được mã hóa giống hệt nhau; điểm mã 128 - 255 khác nhau bằng cách trở thành chuỗi 2 byte với UTF-8 trong khi chúng là các byte đơn với Latin-1.

115 hữu ích 3 bình luận chia sẻ
60

UTF

UTF là một nhóm các lược đồ mã hóa nhiều byte có thể biểu thị các điểm mã Unicode có thể được lặp lại lên tới 2 ^ 31 [khoảng 2 tỷ] ký tự. UTF-8 là một hệ thống mã hóa linh hoạt, sử dụng từ 1 đến 4 byte để thể hiện các điểm mã 2 ^ 21 [khoảng 2 triệu] đầu tiên.

Câu chuyện dài: bất kỳ ký tự nào có đại diện điểm mã / thứ tự dưới 127, hay còn gọi là ASCII 7 bit an toàn được thể hiện bằng chuỗi 1 byte giống như hầu hết các mã hóa byte đơn khác. Bất kỳ ký tự nào có điểm mã trên 127 được biểu thị bằng một chuỗi gồm hai hoặc nhiều byte, với đặc điểm mã hóa được giải thích tốt nhất ở đây .

ISO-8859

ISO-8859 là một nhóm các lược đồ mã hóa một byte được sử dụng để biểu diễn các bảng chữ cái có thể được biểu diễn trong phạm vi từ 127 đến 255. Các bảng chữ cái khác nhau này được định nghĩa là "các phần" theo định dạng ISO-8859- n , quen thuộc nhất trong những thứ này có thể là ISO-8859-1 hay còn gọi là 'Latin-1'. Như với UTF-8, ASCII 7 bit an toàn vẫn không bị ảnh hưởng bất kể họ mã hóa được sử dụng.

Hạn chế của sơ đồ mã hóa này là không có khả năng chứa các ngôn ngữ bao gồm hơn 128 ký hiệu hoặc hiển thị một cách an toàn nhiều hơn một họ ký hiệu cùng một lúc. Đồng thời, mã hóa ISO-8859 đã không còn được ưa chuộng với sự gia tăng của UTF. "Nhóm công tác" ISO chịu trách nhiệm về việc đã tan rã vào năm 2004, để lại bảo trì cho tiểu ban mẹ của nó.

60 hữu ích 1 bình luận chia sẻ
13

ISO-8859-1 là một tiêu chuẩn kế thừa từ những năm 1980. Nó chỉ có thể đại diện cho 256 ký tự nên chỉ phù hợp với một số ngôn ngữ trong thế giới phương tây. Ngay cả đối với nhiều ngôn ngữ được hỗ trợ, một số ký tự bị thiếu. Nếu bạn tạo một tệp văn bản trong bảng mã này và thử sao chép / dán một số ký tự tiếng Trung, bạn sẽ thấy kết quả kỳ lạ. Nói cách khác, đừng sử dụng nó. Unicode đã chiếm lĩnh thế giới và UTF-8 có khá nhiều tiêu chuẩn hiện nay trừ khi bạn có một số lý do kế thừa (như tiêu đề HTTP cần tương thích với mọi thứ).

13 hữu ích 2 bình luận chia sẻ
7
  • ASCII: 7 bit. 128 điểm mã.

  • ISO-8859-1: 8 bit. 256 điểm mã.

  • UTF-8: 8-32 bit (1-4 byte). 1.112.064 điểm mã.

Cả ISO-8859-1 và UTF-8 đều tương thích ngược với ASCII, nhưng UTF-8 không tương thích ngược với ISO-8859-1:

#!/usr/bin/env python3

c = chr(0xa9)
print(c)
print(c.encode('utf-8'))
print(c.encode('iso-8859-1'))

Đầu ra:

©
b'\xc2\xa9'
b'\xa9'
7 hữu ích 0 bình luận chia sẻ
0

Lý do của tôi để nghiên cứu câu hỏi này là từ quan điểm, là cách chúng tương thích với nhau. Bộ ký tự Latin1 (iso-8859) tương thích 100% để được lưu trữ trong kho dữ liệu utf8. Tất cả các ký tự ascii & Extended-ascii sẽ được lưu trữ dưới dạng một byte.

Đi theo một cách khác, từ bộ ký tự utf8 đến Latin1 có thể hoặc không thể hoạt động. Nếu có bất kỳ ký tự 2 byte nào (ký tự vượt quá 255-ascii 255), chúng sẽ không lưu trữ trong kho dữ liệu Latin1.

0 hữu ích 3 bình luận chia sẻ
0

Từ góc nhìn khác, các tệp mà cả mã hóa unicode và ascii đều không đọc được vì chúng có một byte 0xc0trong đó, dường như được đọc bởi iso-8859-1 đúng cách. Thông báo trước là tập tin không nên có các ký tự unicode trong đó.

0 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ utf-8 character-encoding iso-8859-1 , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading