Кодировка для строковых литералов с узкими символами определяется реализацией, поэтому вам действительно нужно прочитать документацию (если вы можете ее найти).Быстрый эксперимент показывает, что и VC ++ (в любом случае VC8), и g ++ (в любом случае, 4.4.2) просто копируют байты из исходного файла;строковый литерал будет в любой кодировке, в которой его сохранил ваш редактор. (Это явно нарушает стандарт, но, похоже, это обычная практика.)
C ++ 11 имеет строковые литералы UTF-8,что позволило бы вам написать u8"text"
и убедиться, что "text"
было закодировано в UTF-8.Но я не ожидаю, что он будет работать надежно: проблема в том, что для этого компилятор должен знать, какую кодировку имеет ваш исходный файл.По всей вероятности, авторы компиляторов будут продолжать игнорировать проблему, просто копируя байты из исходного файла, и достигать соответствия, просто документируя, что исходный файл должен быть в UTF-8, чтобы эти функции работали.