Nếu không có ngữ cảnh khác, tôi sẽ nói rằng số byte tối đa cho một ký tự trong UTF-8 là
câu trả lời: 6 byte
Tác giả của câu trả lời được chấp nhận đã chỉ ra một cách chính xác đây là "đặc điểm kỹ thuật gốc". Điều đó hợp lệ thông qua RFC-2279 1 . Như J. Cocoe đã chỉ ra trong các nhận xét bên dưới, điều này đã thay đổi vào năm 2003 với RFC-3629 2 , giới hạn UTF-8 ở chế độ mã hóa 21 bit, có thể được xử lý bằng sơ đồ mã hóa sử dụng bốn byte.
trả lời nếu bao gồm tất cả unicode: 4 byte
Tuy nhiên, trong Java <= v7 , họ nói về tối đa 3 byte để biểu diễn unicode với UTF-8? Đó là bởi vì đặc điểm kỹ thuật unicode ban đầu chỉ xác định mặt phẳng đa ngôn ngữ cơ bản ( BMP ), tức là nó là phiên bản cũ hơn của unicode, hoặc tập hợp con của unicode hiện đại. Vì thế
trả lời nếu chỉ đại diện cho unicode gốc, BMP: 3 byte
Tuy nhiên, OP nói về việc đi theo hướng khác. Không phải từ ký tự thành UTF-8 byte, mà từ UTF-8 byte thành biểu diễn "Chuỗi" byte. Có lẽ tác giả của câu trả lời được chấp nhận đã hiểu điều đó từ ngữ cảnh của câu hỏi, nhưng điều này không nhất thiết phải rõ ràng, vì vậy có thể gây nhầm lẫn cho người đọc bình thường của câu hỏi này.
Đi từ UTF-8 sang mã hóa gốc, chúng ta phải xem cách triển khai "Chuỗi". Một số ngôn ngữ, như Python> = 3 sẽ đại diện cho mỗi ký tự bằng các điểm mã số nguyên, cho phép 4 byte cho mỗi ký tự = 32 bit để bao gồm 21 mà chúng ta cần cho unicode, với một số lãng phí. Tại sao không chính xác là 21 bit? Bởi vì mọi thứ nhanh hơn khi chúng được căn chỉnh theo byte. Một số ngôn ngữ như Python <= 2 và Java biểu diễn các ký tự bằng cách sử dụng mã hóa UTF-16, có nghĩa là chúng phải sử dụng các cặp thay thế để đại diện cho unicode mở rộng (không phải BMP). Dù bằng cách nào thì đó vẫn là tối đa 4 byte.
trả lời nếu đi UTF-8 -> mã hóa gốc: 4 byte
Vì vậy, kết luận cuối cùng, 4 là câu trả lời đúng phổ biến nhất, vì vậy chúng tôi đã đúng. Tuy nhiên, số dặm có thể thay đổi.