2012-02-20 31 views
13

Tôi đang cố gắng tìm ra "byte tiếp tục" là gì (vì mục đích tò mò) trong mã hóa UTF-8.UTF-8 bytes tiếp tục

Wikipedia giới thiệu thuật ngữ này trong UTF-8 article mà không cần xác định nó ở tất cả

lợi nhuận tìm kiếm Google không có thông tin hữu ích trong hai. Tôi sắp nhảy vào đặc tả chính thức, nhưng tốt nhất nên đọc một bản tóm tắt cấp cao trước tiên.

+0

Có vẻ như ai đó vừa chỉnh sửa bài viết trên Wikipedia. (: – tripleee

Trả lời

30

Một byte tiếp tục trong UTF-8 là bất kỳ byte nào trong đó hai bit trên cùng là 10.

Chúng là các byte tiếp theo trong chuỗi nhiều byte. Bảng sau đây có thể giúp:

Unicode code points Range Encoding Binary value 
------------------- -------- -------------------------- 
U+000000-U+00007f 0xxxxxxx 0xxxxxxx 

U+000080-U+0007ff 110yyyxx 00000yyy xxxxxxxx 
        10xxxxxx 

U+000800-U+00ffff 1110yyyy yyyyyyyy xxxxxxxx 
        10yyyyxx 
        10xxxxxx 

U+010000-U+10ffff 11110zzz 000zzzzz yyyyyyyy xxxxxxxx 
        10zzyyyy 
        10yyyyxx 
        10xxxxxx 

Tại đây bạn có thể xem cách mã Unicode trỏ ánh xạ tới chuỗi byte nhiều byte UTF-8 và giá trị nhị phân tương đương của chúng.

Các quy tắc cơ bản là thế này:

  1. Nếu một byte bắt đầu với một chút 0, đó là một giá trị byte đơn ít hơn 128.
  2. Nếu nó bắt đầu với 11, đó là byte đầu tiên của một đa -byte chuỗi và số lượng các bit 1 lúc bắt đầu cho biết tổng số byte có trong tổng số (110xxxxx có hai byte, 1110xxxx có ba và 11110xxx có bốn).
  3. Nếu bắt đầu bằng 10, đó là một byte tiếp tục.

Sự khác biệt này cho phép xử lý khá tiện lợi như có thể sao lưu từ bất kỳ một byte nào để tìm byte đầu tiên của điểm mã đó. Chỉ cần tìm kiếm ngược cho đến khi bạn tìm thấy một không bắt đầu với các bit 10.

Tương tự, nó cũng có thể được sử dụng cho UTF-8 strlen bằng cách chỉ đếm số không 10xxxxxx byte.

+0

Tôi nghĩ rằng đây là một chút của một căng/overbroading ... anyways, nó có chứa thông tin hữu ích! Những gì tôi không thể hiểu được mặc dù, là lý do tại sao '11' là bao giờ cần thiết. Người ta có thể nói rằng byte hàng đầu bắt đầu với '0', và những cái tiếp tục (chúng có thể là nhiều quân sự) bắt đầu bằng' 1'. –

+0

@ ΈρικΚωνσταντόπουλος "_ byte hàng đầu bắt đầu bằng' 0'_ "- điều này không chính xác. Một byte bắt đầu bằng '0' là một điểm mã byte đơn, vì vậy nó không phải là một byte _leading_ cũng như một sự tiếp nối. Nó đứng một mình. Đó là những gì làm cho nó khác biệt với các byte bắt đầu bằng '11', cho biết nó là byte đầu tiên của _sequence_ và nhiều byte được dự kiến ​​sẽ theo sau để biểu diễn một điểm mã duy nhất. –

+0

@WilliamPrice Dunno lý do tại sao tôi đăng nhận xét ngoài chủ đề đó, nhưng tôi nghĩ rằng đó là tôi đang cố gắng phát minh ra mã hóa của riêng mình. –

0

Nói cách ngắn, byte tiếp tục là các byte trừ byte đầu tiên hoặc byte đơn. Trong UTF-8, các byte tiếp tục được bắt đầu bằng 0x10.

+0

Nếu bạn thêm trích dẫn, tôi sẽ xóa phần ghi chú. –

0

"byte tiếp tục" không phải là một thuật ngữ mà là một từ tiếng Anh thông thường và cụm từ "byte". Nếu được sử dụng như một thuật ngữ giả, nó có thể gây nhầm lẫn cho người đọc.

Tiêu chuẩn Unicode sử dụng biểu thức này ở một nơi duy nhất, Ch. 5, khoản 5.22: “Ví dụ, xem xét ba byte đầu tiên của chuỗi bốn byte UTF-8, theo sau là một byte không thể là byte tiếp tục hợp lệ : Trong bối cảnh này, ý nghĩa là rõ ràng: nó chỉ là một byte tiếp tục một cái gì đó, cụ thể là một chuỗi các byte.

Trang Wikipedia rõ ràng sử dụng "byte tiếp tục" có nghĩa là bất kỳ byte nào trong mã hóa UTF-8 ngoại trừ byte đầu tiên của dạng được mã hóa của một ký tự.