01/10/2018, 00:43
Thắc mắc về Bảng mã và Icon Fonts
Cho em hỏi hơi mơ hồ là nếu không có Unicode thì icon fonts như Awesome,… có hiện thị được không ạ?
Bài liên quan
Cho em hỏi hơi mơ hồ là nếu không có Unicode thì icon fonts như Awesome,… có hiện thị được không ạ?
Đầu tiên, chúng ta phải hiểu là file mà chúng ta thấy chỉ là do máy tính đã biểu diễn đánh lừa chúng ta mà thôi. Chứ thực ra, data luôn được biểu diễn thế này:
00110011 11001111 11111111
(mỗi byte là 8 bit nhớ)
Font trước kia là 1 bộ ảnh với mỗi ảnh là hình ảnh của 1 chữ cái (gọi là glyph). Việc vẽ các glyph này được gọi là typography và do các hoạ sỹ họ vẽ, nói chung, ngày giỏi lắm vẽ được 1 chữ trong bộ font mà thôi. 1 chữ lại gồm nhiều size nữa nên 1 font vẽ chắc cũng cả tháng mới xong ^^ Các font này còn được gọi là font raster. Nhược điểm là font raster nếu hoạ sỹ không vẽ size đó thì máy phải scale dựa vào thuật toán resize.
Icon font là font vector, các glyph giờ được render nhờ định nghĩa cách vẽ nên phóng to thu nhỏ không bị vỡ. Tuy nhiên, thay vì vẽ character, các iconfont đi vẽ icon/biểu tượng.
Hình vẽ dưới là glyph của 1 font.
Unicode hay còn gọi là character encoding là tập hợp ánh xạ qui định byte này được ánh xạ sang character/glyph nào (trong font họ qui định glyph này sẽ hiện thị character gì). Ví dụ như bảng dưới đây là của UTF8 (còn gọi là 1 code pages, mỗi ánh xạ được gọi là 1 code point)
Quay trở lại cái 3 ký tự phía trên, nó sẽ được máy tính lừa tình in ra: (cái máy tinhs) (mặt trời) (bao cao su) khi sử dụng font awesome, utf8 encoding. Nếu chọn sang bảng mã khác, ví dụ utf16, byte này được ánh xạ sang character khác nên nó in ra (cái búa) (ngôi sao) (con ve).
Vậy nếu không có qui định bảng mã, nó vẫn hiển thị do chọn mặc định của hệ thống. Còn nếu có qui định bảng mã thì nó hiển thị theo bảng mã mình chọn. Cái này cũng tương tự với 1 chuỗi, ở UTF8 thì nó là “Tôi”, sang bảng mã VNI nó thành “þÿj”
Unicode là tập hợp ánh xạ ký tự nào được ánh xạ sang code point nào mới đúng, còn UTF-8, UTF-16, UCS-2, v.v… là tập hợp ánh xạ code point tới code value…
Hi, cái này mình nhầm thật.
Unicode định nghĩa code spaces chứa 1.114.112 code points (các code point được refer là U+ {số thứ tự code point} như U+0058 sẽ ánh xạ sang chữ chữ/glyph X). Còn UTF8 là cách mã hoá, ví dụ chữ € (U+20AC) được mã bằng 3 byte (11100010 10000010 10101100). Nên các chữ có mũ như Ô, ô, … sẽ làm kích thước file to lên.
Bảng code page phía trên của UTF8, dòng 1 chính là chữ/glyph, dòng 2 là utf8 mã hexa (họ viết 0020 nhưng thực ra lưu trong file chỉ là 20 thôi), dòng 3 là code point theo thứ tự đếm thông thường. Cám ơn @tntxtnt đã correct lại. ^^
Vậy các bit sẽ quy định một kỹ tự cụ thể ạ? Ví dụ 00001011 quy định là chứ a, 00100101 là b… nếu mã hóa theo Utf-8 thì ra chữ a, còn theo kiểu mã hóa khác thì lại ra kỹ tự khác ạ?
Có phải là Unicode thì có quá nhiều ký tự mà bàn phím “không có nút để bấm được” nên họ mới tạo ra font ạ?
LATIN SMALL LETTER A (U+0061)
Get the complete details on Unicode character U+0061 on FileFormat.Info
chữ ‘a’ có code point là U+0061, mã hóa theo UTF-8 là 0x61 (1 byte), UTF-16 là 0x0061 (2 bytes), UTF-32 là 0x00000061 (4 bytes)
LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE (U+1EA5)
Get the complete details on Unicode character U+1EA5 on FileFormat.Info
chữ ‘ấ’ có code point là U+1EA5, mã hóa theo UTF-8 là 0xE1 0xBA 0xA5 (3 bytes), UTF-16 là 0x1EA5 (2 bytes), UTF-32 là 0x00001EA5 (4 bytes)
SMILING FACE WITH OPEN MOUTH (U+1F603)
Get the complete details on Unicode character U+1F603 on FileFormat.Info
chữ ‘’ có code point là U+1F603, mã hóa theo UTF-8 là 0xF0 0x9F 0x98 0x83 (4 bytes), UTF-16 là 0xD83D 0xDE03 (4 bytes), UTF-32 là 0x0001F603 (4 bytes)
nếu bạn muốn tìm hiểu “sơ sơ” thêm chút nữa thì bạn nên đọc trang này: http://www.joelonsoftware.com/articles/Unicode.html
dịch sơ:
Em cũng hiểu sơ sơ rồi ạ! Mà anh giải thích qua Font được không ạ? Nhân tiện cho em hỏi luôn là chỉ có utf-xx mới mã hóa hết 1 triệu code points mà trong HTML em khai báo meta charset=“khác utf-xx” mà sao Icon Font vẫn hiện thị được ạ?
vậy có lẽ là người ta dùng thư viện riêng cho icon, hay là CSS icon, ko phải là font: http://www.w3schools.com/w3css/w3css_icons.asp
quăng vô thẻ
<i>
như ví dụ trong trang w3schools đó, nhưng phải có link tới thư viện icon riêng đó:<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
Anh nói qua Font một chút được không ạ?
nói cái gì về font… Bạn Google đi, mình ko phải chuyên gia về font nên ko dám chém gió về font
Ký tự được lưu trong font như thế nào
Font theo chuẩn Unicode
Sử dụng font trong web
Bạn xem thêm toàn bộ codepage ở đây: https://en.wikipedia.org/wiki/Code_page
https://en.wikipedia.org/wiki/Unicode
Các font unicode đã phần chỉ là partial thôi, nghĩa là chứa các hệ chữ latin là chủ yếu, chứ còn hệ “dây dợ, ô vuông” như chữ Thái, chữ Tàu thì … chắc phải bọn Thái, Tàu nó phải tự làm.
Đây là icon của trái tim, nó ở codepoints F004 đó.
Thế Unicode phải định nghĩa thì mới ánh xạ được chứ ạ?
Như ký tự này trong Font phải định nghĩa trong Bảng Mã thì mới hiện thị được ạ?
Trong unicode table có những vùng code point là những vùng trống cho phép những cá nhân, bên thứ 3 tự định nghĩa những ký tự của riêng mình mà không xung đột với những ký tự đã được chuẩn hóa. Những vùng đó gọi là Private Use Area.
Ba vùng đó hiện tại nằm ở các khoảng:
Font Awesome lấy khoảng code point từ U+F000 - U+F2E0 (736 code points) của BMP để thiết kế và chỉ có font của nó mới biết hiển thị ký tự nó định nghĩa. Trong tài liệu của nó có đề cập ở đây.
À, em hiểu rồi! Cảm Ơn Tất Cả!!!