|
Vladislav89 |
|
|
|
Здравствуйте! Я изучаю французский язык и пишу программу, в которой можно было бы повторять изученные слова и фразы. Во французском и других европейских языках присутствуют символы, которых нет в английском языке (è, é, à, ç, û, â и другие). Программа эти символы заменяет на знак вопроса. Например, для кнопки пишешь такой код:
Edit1->Text = "école";
И в поле Edit1 получается: ?cole
И из файла когда тоже считываешь, все эти символы заменяются знаками вопросами, и все они имеют код тот же, что и у знаков вопроса (63). Пытался в Интернете найти как использовать западноевропейскую кодировку в С++, но нигде ответ не нашел. Кто знает? Помогите пожалуйста.
|
|
|
|
 |
|
Joker_vD |
|
|
|
Велик Unicode, и wchar_t — аватара его, прочее же от лукавого. Уж скоро 2013 год наступит, а вы с кодовыми страницами все работаете.
|
|
|
|
 |
|
Vladislav89 |
|
|
|
Я знаю, какой год скоро, но я никогда не работал с кодировками кроме русской и английской. Я серьезно, подскажите кто знает.
|
|
|
|
 |
|
Xaositect |
|
|
"Русской" и "английской" кодировок не бывает. Почитайте: http://habrahabr.ru/sandbox/47663/ В конце там очень кратко написано, что делать со строками с C++.
|
|
|
|
 |
|
Joker_vD |
|
|
|
Вам надо всюду вместо char и std::string пользоваться wchar_t и std::wstring, а приложение собирать с включенной опцией UNICODE — хотя я не уверен, с какой версии C++ Builder поддерживает wide-компоненты... боюсь, что с очень поздней.
|
|
|
|
 |
|
yk2ru |
|
|
|
Набор компонент TNTUnicode вам в помощь.
|
|
|
|
 |
|
shau-kote |
|
|
|
Последний раз редактировалось shau-kote 16.12.2012, 17:54, всего редактировалось 1 раз.
В свою очередь приведу статью Спольски - Абсолютный минимум, который каждый разработчик программного обеспечения обязательно должен знать о Unicode и наборах символов. А в кратце - да, поддерживаю предыдущих ораторов - используйте Unicode, и будет Вам счастье.
|
|
|
|
 |
|
Vladislav89 |
|
|
|
Я разобрался более менее с кодировками. Я везде AnsiString заменил на UnicodeString, программа стала правильно принимать символы. Только проблема с сохранением в файл. Например, в поле Edit1 написано слово "Gâteau", в файл при использовании кода:
TStringList *file = new TStringList; file->Add(Edit1->Text); file->SaveToFile(...); delete file;
В итоге в файле вместо "Gâteau" получается "Gateau". При сохранении в файл дополнительные символы заменяет на обычные латинские. Подскажите пожалуйста, в чем тут особенность?
|
|
|
|
 |
|
Joker_vD |
|
|
|
Потому что вы при вызове SaveToFile() не указываете кодировку? По умолчанию используется системная ANSI-кодировка, поэтому ваши юникод-строки перегоняются в ANSI, а при этом вполне возможно, что символы с диакритикой будут заменяться на символы без нее.
|
|
|
|
 |
|
Vladislav89 |
|
|
|
Понял. Спасибо. Оказывается, вот так пишется: file->SaveToFile(FileName, TEncoding::Unicode); аналогично и с LoadFromFile. А я-то думал...
|
|
|
|
 |