Какая кодировка по умолчанию для строк C? - PullRequest
14 голосов
/ 22 октября 2010

Я знаю, что строки C - это char [] с '\ 0' в последнем элементе.Но как кодируются символы?

Обновление: я нашел эту классную ссылку, которая говорит о многих других языках программирования и их соглашениях о кодировании: Ссылка

Ответы [ 5 ]

8 голосов
/ 22 октября 2010

Все, что говорится в стандарте, заключается в том, что вы получите как минимум 52 символа латинского алфавита в верхнем и нижнем регистре, цифры от 0 до 9, символы ! " # % & ' ( ) * + , - . / : ; < = > ? [ \ ] ^ _ { | } ~ и пробел, а также управляющие символы, представляющие горизонтальвкладка, вертикальная вкладка и подача формы.

Единственное, что говорится о числовом кодировании, это то, что все вышеперечисленное помещается в один байт, и что значение каждой цифры после нуля на единицу больше значения предыдущего.

Фактическая кодировка, вероятно, унаследована от ваших настроек локали.Возможно, что-то совместимое с ASCII.

7 голосов
/ 22 октября 2010

Строка c - это всего лишь последовательность байтов.Это означает, что он не имеет четко определенной кодировки, это может быть ASCII, UTF8 или что-то еще, в этом отношении.Поскольку большинство операционных систем понимают ASCII по умолчанию, а исходный код в основном написан с кодировкой ASCII, поэтому данные, которые вы найдете в простом (char *), очень часто также будут ASCII.Тем не менее, нет никакой гарантии, что то, что вы получите (char *), будет UTF8 или даже KOI8.

6 голосов
/ 22 октября 2010

Стандарт не указывает это. Обычно с ASCII.

1 голос
/ 22 октября 2010

Как уже указывалось, C имеет некоторые ограничения, которые разрешены для кодировок исходного кода и символов выполнения, но является относительно допустимым.Так что, в частности, это не обязательно ASCII, и в большинстве случаев в настоящее время, по крайней мере, его расширение.

Ваша среда выполнения предназначена для выполнения возможного перевода между источником и набором символов выполнения.Поэтому, как правило, вам не нужно заботиться о кодировке и, наоборот, пытаться кодировать независимо от нее.Вот почему существуют специальные escape-последовательности для специальных символов, таких как '\n' или '\t', и универсальные кодировки символов, такие как '\u0386'.Поэтому обычно вам не нужно искать кодировки для набора символов выполнения самостоятельно.

1 голос
/ 22 октября 2010

Они на самом деле не «закодированы» как таковые, они просто хранятся как есть. Строка "hello" представляет массив со значениями символов 'h', 'e', 'l', 'l', 'o' и '\0' в указанном порядке. Стандарт C имеет базовый набор символов, который включает эти символы, но не определяет кодировку в байтах. Это может быть EBCDIC, насколько вы знаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...