ASCII использует 8-битную систему. Каждому символу присваивается уникальное значение ASCII. Но UNICODE использует 32 или 64-разрядное представление. Так как символы назначаются там? Использует ли C/C++ UNICODE?Как ASCII, как символы распознаются двоичными значениями в UNICODE?
ответ
Как UTF-8 Работы
Single-Byte Character
Для одного байта символа (т.е. все 128 символов в обычной таблице ASCII), самый старший бит - 0
. Присутствие 0
в наиболее значимом бите всегда указывает, что байт является однобайтовым символом.
0XXXXXXX
Пример
символов 33 восклицательный знак ("!").
Оно представлено в двоичной системе, как
00100001
.
Обратите внимание, что самый старший бит 0
. Так мы знаем, как интерпретировать байт как однобайтовый символ из 128-символьной таблицы ASCII.
двухбайтовая Последовательность
В последовательности 2-байтовой, наиболее значимый бит обоего байт установлена в 1
. Присутствие 1
в наиболее значимом бите всегда сигнализирует многобайтную последовательность.
В первом байте, то два наиболее значимые биты устанавливаются в 1
, а третий установлен в 0
.
Во втором байте самый старший бит установлен на 1
, а второй установлен на 0
.
1-й байт:110XXXXX
2-й байт:10XXXXXX
Остальные 11 битов (помеченные как X
) затем объединяются. Целое число, которое они представляют, равно символьному индексу.
Пример
161 символов это вверх-вниз восклицательным ("¡").
Оно представлено в двоичной системе, как
1100010 10100001
Если исключить биты маркировки позиции последовательности UTF-8:
11000010
→ XXX00010
10100000
→ XX100001
и конкатенировать t он остальные биты, мы остались с:
00010 100001
который является двоичным представлением 161.
Три-Байт Последовательность
В последовательности 3-байтового, самый старший бит всех трех байтов установлен на 1
. Опять же, наличие 1
в наиболее значимом бите всегда сигнализирует многобайтную последовательность.
В первом байте, то три наиболее значимые биты устанавливаются в 1
, а четвертый установлен в 0
.
Во втором и третьем байтах самый старший бит установлен на 1
, а второй установлен на 0
.
1-й байт:1110XXXX
2-й байт:10XXXXXX
3-й байт:10XXXXXX
Оставшиеся 16 бит (помеченные как X
) затем объединяются. Целое число, которое они представляют, равно символьному индексу.
Пример
символов 2308 является "ऄ".
Оно представлено в двоичной системе, как
11100000 10100100 10000100
Если исключить биты маркировки позиции последовательности UTF-8:
11100000
→ XXXX0000
10100100
→ XX100100
10000100
→ XX000100
и сцепить оставшиеся биты, мы остались с:
0000 100100 000100
который является двоичным представлением 2308.
Последовательность четырехбайтового
Образец продолжается до 4-байтовой последовательности в том же что двухбайтная последовательность расширена до 3-байтовой последовательности. Основное различие заключается в том, что в первом байте четыре значащих бита установлены в 1
, а пятый - 0
.
первый байт:11110XXX
второй байт:10XXXXXX
третьи байты:10XXXXXX
четвёртых байты:10XXXXXX
Индекс символов сконструирован, как указано выше, из оставшихся 21 бит.
Большое спасибо Jesse.Does C/C++ использовать это представление UNICODE? Или эти языки ограничены только ASCII? – Sankar
Юникод в первую очередь определяет символы по кодовой точке. Это просто гигантская таблица, в которой указывается, что буква «A» (LATIN CAPITAL LETTER A) имеет кодовую точку U + 0041, «ท» (THAI CHARACTER THO THAHAN) имеет кодовую точку U + 0E17 и т. Д. И т. Д. ,
Существует несколько кодировок Unicode , которые кодируют эти кодовые точки в физические биты. UCS-2 была ранним кодированием, которое теперь заменено UTF-16. UTF-32 существует, но UTF-8 стал стандартным кодированием Unicode де-факто. Каждая кодировка работает по-разному и имеет разные плюсы и минусы, подробно прочитайте их спецификацию, если вы заинтересованы. Наиболее очевидным отличием является то, что UTF-8 использует минимум из 8 бит на символ, UTF-16 минимум из 16 бит и 32 бита UTF-32.
- 1. Как заменить символы Unicode на ASCII
- 2. Non-ASCII, символы не-Unicode в литералах
- 3. Как конвертировать unicode в ASCII?
- 4. Как изменить unicode на ascii и удалить нераспознанные символы
- 5. Генерировать символы Ascii/Unicode в Cmd.exe
- 6. Преобразование символов ASCII в символы Unicode
- 7. Как преобразовать символы Unicode в коды ascii в delphi 7?
- 8. Как представить символы Unicode в шаблоне регулярного выражения ASCII?
- 9. Как выводить символы Unicode в виде пары символов ASCII?
- 10. Как определить символы Unicode в PHP, используя только ASCII?
- 11. Как обрабатывать символы Unicode (не ASCII) в Python?
- 12. код Возвращает символы Unicode Как Преобразовать в ASCII
- 13. Являются ли символы Unicode и Ascii одинаковыми?
- 14. Преобразование unicode в ascii
- 15. Как конвертировать ASCII или Unicode в кириллицу?
- 16. Как печатать/хранить символы, отличные от ASCII (unicode?)
- 17. Как обеспечить, чтобы не вводились символы unic ascii unicode?
- 18. Файлы UNIX-ASCII кажутся двоичными
- 19. ASCII для Unicode «beautifier»
- 20. C Программирование - ascii для окон «неизвестные» символы
- 21. Отличия между подписанными двоичными значениями
- 22. Как индексировать символы в Unicode?
- 23. как преобразовать unicode в латинские символы python
- 24. Арабские символы не распознаются
- 25. Арабские символы не распознаются
- 26. Заменить символы non-ascii из строки unicode в Python
- 27. printf() Расширенные символы Unicode?
- 28. javascript - как преобразовать строку unicode в ascii
- 29. Преобразование ASCII-представления unicode в unicode
- 30. Как узнать, содержит ли строка символы Unicode?
http://www.cprogramming.com/tutorial/unicode.html – Sanoob
http: // kunststube.net/encoding – deceze
Это не по теме (не о программировании, кроме последнего вопроса, к которому правильный ответ «может быть») слишком широк и основан на неправильных предположениях (ASCII - это 7-битная система и Unicode as такие как не присваивают двоичные значения, присваивают кодовые номера), а кодировки передачи Unicode используют 8, 16 или 32 бита на символ (никогда 64). –