Если взять длину строки, содержащей символ за пределами 7-битного ASCII таблицы, я получаю разные результаты на ОС Windows и Linux:C Строка кодирующая Windows/Linux
Windows: strlen("ö") = 1
Linux: strlen("ö") = 2
На машине Windows, строковое явно закодирован в «расширенном» формате ascii как 0xF6
, тогда как на машине Linux он кодируется в UTF-8 с 0xC3 0x96
, что дает длину 2 символа.
Вопрос:
Почему строка C получает по-разному закодирован на Windows, и Linux машине?
Встал вопрос в дискуссии, я имел с участником форума собрата по обзору Кодекса (see this thread).
Являются ли оба исходных файла одинаковыми с кодировкой и спецификацией? – sidyll
Похоже, что кодировка может быть выбрана из локальных настроек. И, похоже, вы тоже можете установить его? https://gcc.gnu.org/onlinedocs/cpp/Invocation.html (-fwide-exec-charset = charset) – Sush
Потому что в Windows CP-1252 по умолчанию, и есть некоторые проблемы с UTF-8, когда Microsoft хочет поддерживать обратную совместимость. См. Это в SU [Windows 7 UTF-8 и Unicode] (// superuser.com/q/221593) – Danh