Vladislav89 |
Кодировки в С++ 12.12.2012, 22:39 |
|
04/12/12 11
|
Здравствуйте! Я изучаю французский язык и пишу программу, в которой можно было бы повторять изученные слова и фразы. Во французском и других европейских языках присутствуют символы, которых нет в английском языке (è, é, à, ç, û, â и другие). Программа эти символы заменяет на знак вопроса. Например, для кнопки пишешь такой код:
Edit1->Text = "école";
И в поле Edit1 получается: ?cole
И из файла когда тоже считываешь, все эти символы заменяются знаками вопросами, и все они имеют код тот же, что и у знаков вопроса (63). Пытался в Интернете найти как использовать западноевропейскую кодировку в С++, но нигде ответ не нашел. Кто знает? Помогите пожалуйста.
|
|
|
|
|
Joker_vD |
Re: Кодировки в С++ 13.12.2012, 00:13 |
|
Заслуженный участник |
|
09/09/10 3729
|
Велик Unicode, и wchar_t — аватара его, прочее же от лукавого. Уж скоро 2013 год наступит, а вы с кодовыми страницами все работаете.
|
|
|
|
|
Vladislav89 |
Re: Кодировки в С++ 13.12.2012, 10:26 |
|
04/12/12 11
|
Я знаю, какой год скоро, но я никогда не работал с кодировками кроме русской и английской. Я серьезно, подскажите кто знает.
|
|
|
|
|
Xaositect |
Re: Кодировки в С++ 13.12.2012, 11:35 |
|
Заслуженный участник |
|
06/10/08 6422
|
|
|
|
|
Joker_vD |
Re: Кодировки в С++ 13.12.2012, 14:01 |
|
Заслуженный участник |
|
09/09/10 3729
|
Вам надо всюду вместо char и std::string пользоваться wchar_t и std::wstring, а приложение собирать с включенной опцией UNICODE — хотя я не уверен, с какой версии C++ Builder поддерживает wide-компоненты... боюсь, что с очень поздней.
|
|
|
|
|
yk2ru |
Re: Кодировки в С++ 13.12.2012, 17:27 |
|
03/10/06 826
|
Набор компонент TNTUnicode вам в помощь.
|
|
|
|
|
shau-kote |
Re: Кодировки в С++ 16.12.2012, 17:54 |
|
15/01/12 87 г. Москва
|
|
|
|
|
Vladislav89 |
Re: Кодировки в С++ 11.01.2013, 00:21 |
|
04/12/12 11
|
Я разобрался более менее с кодировками. Я везде 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 |
|
Заслуженный участник |
|
09/09/10 3729
|
Потому что вы при вызове SaveToFile() не указываете кодировку? По умолчанию используется системная ANSI-кодировка, поэтому ваши юникод-строки перегоняются в ANSI, а при этом вполне возможно, что символы с диакритикой будут заменяться на символы без нее.
|
|
|
|
|
Vladislav89 |
Re: Кодировки в С++ 11.01.2013, 18:51 |
|
04/12/12 11
|
Понял. Спасибо. Оказывается, вот так пишется: file->SaveToFile(FileName, TEncoding::Unicode); аналогично и с LoadFromFile. А я-то думал...
|
|
|
|
|
|
Страница 1 из 1
|
[ Сообщений: 10 ] |
|
Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы