Ответ 1
-
Реализация определена. Или даже приложение определено; стандарт на самом деле не накладывает никаких ограничений на то, что делает приложение с их, и ожидает, что многое зависит от локали. Все это действительно реализуемая реализация, это кодирование, используемое в строке литералы.
-
В каком смысле. Большая часть ОС игнорирует большинство кодировок; Вы будете имеют проблемы, если
'\0'
не является нулевым байтом, но даже EBCDIC встречает это требование. В противном случае, в зависимости от контекста, будет несколько дополнительные символы, которые могут быть значительными (a'/'
в именах путей, например); все они используют первые 128 кодировок в Unicode, поэтому будет иметь однобайтовое кодирование в UTF-8. В качестве примера я использовал как UTF-8, так и ISO 8859-1 для имен файлов под Linux. Единственный реальный проблема отображает их: если вы делаетеls
вxterm
, например,ls
, аxterm
будет считать, что имена файлов находятся в одном и том же кодирование в качестве шрифта дисплея. -
Это зависит в основном от языка. В зависимости от языка, это вполне возможно для внутреннего кодирования узкой строки символов не для соответствуют тому, что используется для строковых литералов. (Но как это могло быть в противном случае, поскольку кодирование строкового литерала должно быть определено в время компиляции, где в качестве внутреннего кодирования для узкого символа строки зависят от языка, используемого для его чтения, и могут варьироваться от одного строка к следующей.)
Если вы разрабатываете новое приложение в Linux, я бы сильно рекомендуем использовать Unicode для всего, с UTF-32 для широкого символа строки и UTF-8 для строк с узким символом. Но не рассчитывайте на все, что находится за пределами первых 128 точек кодирования, работающих в строке литералы.