Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия, Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки
Здравствуйте! Я изучаю французский язык и пишу программу, в которой можно было бы повторять изученные слова и фразы. Во французском и других европейских языках присутствуют символы, которых нет в английском языке (è, é, à, ç, û, â и другие). Программа эти символы заменяет на знак вопроса. Например, для кнопки пишешь такой код:
Edit1->Text = "école";
И в поле Edit1 получается: ?cole
И из файла когда тоже считываешь, все эти символы заменяются знаками вопросами, и все они имеют код тот же, что и у знаков вопроса (63). Пытался в Интернете найти как использовать западноевропейскую кодировку в С++, но нигде ответ не нашел. Кто знает? Помогите пожалуйста.
Joker_vD
Re: Кодировки в С++
13.12.2012, 00:13
Велик Unicode, и wchar_t — аватара его, прочее же от лукавого. Уж скоро 2013 год наступит, а вы с кодовыми страницами все работаете.
Vladislav89
Re: Кодировки в С++
13.12.2012, 10:26
Я знаю, какой год скоро, но я никогда не работал с кодировками кроме русской и английской. Я серьезно, подскажите кто знает.
Xaositect
Re: Кодировки в С++
13.12.2012, 11:35
"Русской" и "английской" кодировок не бывает. Почитайте: http://habrahabr.ru/sandbox/47663/ В конце там очень кратко написано, что делать со строками с C++.
Joker_vD
Re: Кодировки в С++
13.12.2012, 14:01
Вам надо всюду вместо char и std::string пользоваться wchar_t и std::wstring, а приложение собирать с включенной опцией UNICODE — хотя я не уверен, с какой версии C++ Builder поддерживает wide-компоненты... боюсь, что с очень поздней.
yk2ru
Re: Кодировки в С++
13.12.2012, 17:27
Набор компонент TNTUnicode вам в помощь.
shau-kote
Re: Кодировки в С++
16.12.2012, 17:54
Последний раз редактировалось shau-kote 16.12.2012, 17:54, всего редактировалось 1 раз.
А в кратце - да, поддерживаю предыдущих ораторов - используйте Unicode, и будет Вам счастье.
Vladislav89
Re: Кодировки в С++
11.01.2013, 00:21
Я разобрался более менее с кодировками. Я везде AnsiString заменил на UnicodeString, программа стала правильно принимать символы. Только проблема с сохранением в файл. Например, в поле Edit1 написано слово "Gâteau", в файл при использовании кода:
TStringList *file = new TStringList; file->Add(Edit1->Text); file->SaveToFile(...); delete file;
В итоге в файле вместо "Gâteau" получается "Gateau". При сохранении в файл дополнительные символы заменяет на обычные латинские. Подскажите пожалуйста, в чем тут особенность?
Joker_vD
Re: Кодировки в С++
11.01.2013, 02:03
Потому что вы при вызове SaveToFile() не указываете кодировку? По умолчанию используется системная ANSI-кодировка, поэтому ваши юникод-строки перегоняются в ANSI, а при этом вполне возможно, что символы с диакритикой будут заменяться на символы без нее.
Vladislav89
Re: Кодировки в С++
11.01.2013, 18:51
Понял. Спасибо. Оказывается, вот так пишется: file->SaveToFile(FileName, TEncoding::Unicode); аналогично и с LoadFromFile. А я-то думал...