За исключением базового набора символов, как вы упомянули, все остальные наборы символов определены реализацией . Это означает, что они могут быть чем угодно, но реализация (то есть реализация компилятора C / library / toolchain) должна документировать эти решения. Ключевые параграфы здесь:
§3.4.1 поведение, определяемое реализацией
неопределенное поведение, при котором каждая реализация документирует, как сделан выбор
§3.4.2 специфичное для локали поведение
поведение, которое зависит от местных конвенций о национальности, культуре и языке, которые каждая реализация документа
§5.2.1.1 Наборы символов
Должны быть определены два набора символов и связанные с ними последовательности упорядочения: набор, в который записаны исходные файлы ( исходный набор символов ), и набор, интерпретируемый в среде выполнения ( набор символов выполнения ). Каждый набор далее делится на базовый набор символов , содержимое которого дано в этом подпункте, и набор из нуля или более специфичных для локали элементов (которые не являются членами основного набор символов) называется расширенные символы . Объединенный набор также называется расширенным набором символов 1034 *. Значения членов набора символов выполнения: , определенные реализацией .
Итак, посмотрите документацию вашего C-компилятора, чтобы узнать, каковы другие наборы символов. Например, на моей странице справочника по gcc некоторые параметры командной строки указывают:
-fexec-charset=charset
Set the execution character set, used for string and character
constants. The default is UTF-8. charset can be any encoding
supported by the system's "iconv" library routine.
-fwide-exec-charset=charset
Set the wide execution character set, used for wide string and
character constants. The default is UTF-32 or UTF-16, whichever
corresponds to the width of "wchar_t". As with -fexec-charset,
charset can be any encoding supported by the system's "iconv"
library routine; however, you will have problems with encodings
that do not fit exactly in "wchar_t".
-finput-charset=charset
Set the input character set, used for translation from the
character set of the input file to the source character set used by
GCC. If the locale does not specify, or GCC cannot get this
information from the locale, the default is UTF-8. This can be
overridden by either the locale or this command line option.
Currently the command line option takes precedence if there's a
conflict. charset can be any encoding supported by the system's
"iconv" library routine.
Чтобы получить список кодировок, поддерживаемых iconv
, запустите iconv -l
. Моя система имеет на выбор 143 различных кодировки.