2012-01-04 14 views
6

Tại sao biểu tượng Độ khác với UTF-8 từ unicode?Tại sao biểu tượng Độ khác với UTF-8 từ unicode?

Theo: http://www.utf8-chartable.de/http://www.fileformat.info/info/unicode/char/b0/index.htm

unicode là B0 nhưng UTF-8 là C2 B0 Tại sao ??

+0

Có hàng nghìn ký tự có biểu diễn khác nhau giữa UTF-8 và UTF-16. Điều gì khiến bạn tin rằng biểu tượng độ xứng đáng được đối xử đặc biệt? –

+5

Bạn cần phải hiểu sự khác biệt giữa Unicode và các mã hóa khác nhau của nó. Đọc các liên kết mà mọi người đã đăng. – tripleee

+0

@MikeNakis: Tôi tin rằng * tất cả * Điểm mã Unicode có các biểu diễn khác nhau trong UTF-8 và UTF-16. –

Trả lời

15

UTF-8 là cách mã hóa các ký tự UTF sử dụng số byte thay đổi (số byte phụ thuộc vào điểm mã).

điểm Mã giữa U + 0080 và U + 07FF sử dụng sau 2-byte encoding:

110xxxxx 10xxxxxx 

nơi x đại diện cho các bit của điểm mã đang được mã hóa.

Hãy xem xét U + 00B0. Trong nhị phân, 0xB0 là 10110000. Nếu một thay thế các bit vào mẫu trên, một nhận:

11000010 10110000 

trong hex, đây là 0xC2 0xB0.

+1

Và, quan trọng, đó chỉ đơn giản là một biểu diễn khác nhau của cùng một điểm mã Unicode, U + 00B0. UTF-16 sử dụng 0x00 0xB0 (big-endian) hoặc 0xB0 0x00 (nhỏ cuối), nhưng UTF-8 sử dụng 0xC2 0xB0 (không có endian-ness). –

+0

Liên kết bạn cung cấp rất hữu ích ... Cảm ơn –

+0

@JonathanLeffler "No endian-ness" Không đúng thuật ngữ nhưng vui –

4

Unicode (UTF-16 và UTF-32) sử dụng mã điểm 0x00B0 cho ký tự đó. UTF-8 không cho phép các ký tự có giá trị trên 127 (0x007F), vì bit cao của mỗi byte được dành riêng để chỉ ra rằng ký tự cụ thể này thực sự là một ký tự nhiều byte.

Bản đồ ASCII 7 bit cơ bản trực tiếp đến 128 ký tự đầu tiên của UTF-8. Bất kỳ ký tự nào có giá trị lớn hơn 127 thập phân (7F hex) phải được "thoát" bằng cách đặt bit cao và thêm 1 hoặc nhiều byte phụ để mô tả.

4

UTF-8 là một mã hóa Unicode. UTF-16 và UTF-32 là các mã hóa Unicode khác.

Unicode xác định giá trị số cho mỗi ký tự; biểu tượng độ có thể là 0xB0 hoặc 176 theo thập phân. Unicode không xác định các giá trị số được biểu diễn như thế nào.

UTF-8 mã hóa giá trị 0xB0 dưới dạng hai octet liên tiếp (byte) với các giá trị 0xC2 0xB0.

UTF-16 mã hóa giá trị giống như 0x00 0xB0 hoặc dưới dạng 0xBo 0x00, tùy thuộc vào độ dài.

UTF-32 mã hóa nó là 0x00 0x00 0x00 0xB0 hoặc là 0xB0 0x00 0x00 0x00, một lần nữa tùy thuộc vào độ tin cậy (tôi cho rằng các thứ tự khác có thể).

1

Câu trả lời từ NPE, Marc và Keith là tốt và trên kiến ​​thức của tôi về chủ đề này. Tôi vẫn phải đọc chúng vài lần trước khi tôi nhận ra điều này là gì. Sau đó, tôi thấy trang web này đã làm cho nó "bấm" cho tôi.

Tại http://www.utf8-chartable.de/, bạn có thể thấy như sau:

UTF-8 needs C2 80 to represent U+0080

Thông báo nó như thế nào là cần thiết để sử dụng HAI byte để mã ONE nhân vật. Bây giờ hãy đọc câu trả lời được chấp nhận từ NPE.

+0

Nếu người dùng không thể xem trang web, nó hiển thị '0x7F' (DELETE) là UTF-8: '7F' và' 0x80' là UTF-8: 'C2 80' –

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