Utf8 Linux имена файлов и C
Я работаю в независимом от OS файловом менеджере, используя SDL_ttf для рисования моего текста. В Windows все работает хорошо, но в Linux я должен использовать функции SDL_ttf UTF8, потому что имена файлов могут быть в кодировке UTF8.
Это хорошо работает, но если у меня есть собственная строка C (не имя файла), например "Ää", она будет отображаться неправильно. Есть ли способ сказать gcc кодировать мои строки как UTF8?
3 ответа
Вам не нужно ничего особенного в вашем компиляторе C для строковых литералов UTF-8. Надлежащая поддержка этого в API, которые вы используете, это другой вопрос, но это, кажется, покрыто.
Что вам нужно сделать, это убедиться, что ваши исходные файлы действительно сохранены в UTF-8, чтобы не-ASCII-символы не преобразовывались в какую-либо другую кодировку при редактировании или сохранении файла.
Компилятору не требуется специальная поддержка UTF-8, если он принимает 8-битные символы и обычные значения ASCII для любых синтаксически значимых символов; другими словами, это почти наверняка не проблема.
C должен иметь какой-то строковый литерал Unicode. Начните поиск в Google для "Unicode-программирования C": два урока, которые кажутся хорошими, - один на developerworks и один на cprogramming.com.
Общий подход для вашего конкретного случая будет использовать широкий строковый литерал L"Ää"
, а затем преобразовать это в UTF-8 с wcstrtombs()
,
По умолчанию gcc должен интерпретировать ваш исходный код и строковые литералы как UTF-8. Попробуйте -fexec-charset
Смотрите также: http://gcc.gnu.org/onlinedocs/gcc-4.0.1/cpp/Implementation_002ddefined-behavior.html