2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Кодировки в С++
Сообщение12.12.2012, 22:39 
Здравствуйте!
Я изучаю французский язык и пишу программу, в которой можно было бы повторять изученные слова и фразы. Во французском и других европейских языках присутствуют символы, которых нет в английском языке (è, é, à, ç, û, â и другие). Программа эти символы заменяет на знак вопроса. Например, для кнопки пишешь такой код:

Edit1->Text = "école";

И в поле Edit1 получается: ?cole

И из файла когда тоже считываешь, все эти символы заменяются знаками вопросами, и все они имеют код тот же, что и у знаков вопроса (63). Пытался в Интернете найти как использовать западноевропейскую кодировку в С++, но нигде ответ не нашел. Кто знает? Помогите пожалуйста.

 
 
 
 Re: Кодировки в С++
Сообщение13.12.2012, 00:13 
Велик Unicode, и wchar_t — аватара его, прочее же от лукавого. Уж скоро 2013 год наступит, а вы с кодовыми страницами все работаете.

 
 
 
 Re: Кодировки в С++
Сообщение13.12.2012, 10:26 
Я знаю, какой год скоро, но я никогда не работал с кодировками кроме русской и английской. Я серьезно, подскажите кто знает.

 
 
 
 Re: Кодировки в С++
Сообщение13.12.2012, 11:35 
Аватара пользователя
"Русской" и "английской" кодировок не бывает. Почитайте: http://habrahabr.ru/sandbox/47663/ В конце там очень кратко написано, что делать со строками с C++.

 
 
 
 Re: Кодировки в С++
Сообщение13.12.2012, 14:01 
Вам надо всюду вместо char и std::string пользоваться wchar_t и std::wstring, а приложение собирать с включенной опцией UNICODE — хотя я не уверен, с какой версии C++ Builder поддерживает wide-компоненты... боюсь, что с очень поздней.

 
 
 
 Re: Кодировки в С++
Сообщение13.12.2012, 17:27 
Набор компонент TNTUnicode вам в помощь.

 
 
 
 Re: Кодировки в С++
Сообщение16.12.2012, 17:54 
Аватара пользователя
В свою очередь приведу статью Спольски - Абсолютный минимум, который каждый разработчик программного обеспечения обязательно должен знать о Unicode и наборах символов.

А в кратце - да, поддерживаю предыдущих ораторов - используйте Unicode, и будет Вам счастье.

 
 
 
 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". При сохранении в файл дополнительные символы заменяет на обычные латинские. Подскажите пожалуйста, в чем тут особенность?

 
 
 
 Re: Кодировки в С++
Сообщение11.01.2013, 02:03 
Потому что вы при вызове SaveToFile() не указываете кодировку? По умолчанию используется системная ANSI-кодировка, поэтому ваши юникод-строки перегоняются в ANSI, а при этом вполне возможно, что символы с диакритикой будут заменяться на символы без нее.

 
 
 
 Re: Кодировки в С++
Сообщение11.01.2013, 18:51 
Понял. Спасибо.
Оказывается, вот так пишется: file->SaveToFile(FileName, TEncoding::Unicode); аналогично и с LoadFromFile. А я-то думал...

 
 
 [ Сообщений: 10 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group