2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Кодировки в С++
Сообщение12.12.2012, 22:39 


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

Edit1->Text = "école";

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

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

 Профиль  
                  
 
 Re: Кодировки в С++
Сообщение13.12.2012, 00:13 
Заслуженный участник


09/09/10
3729
Велик Unicode, и wchar_t — аватара его, прочее же от лукавого. Уж скоро 2013 год наступит, а вы с кодовыми страницами все работаете.

 Профиль  
                  
 
 Re: Кодировки в С++
Сообщение13.12.2012, 10:26 


04/12/12
11
Я знаю, какой год скоро, но я никогда не работал с кодировками кроме русской и английской. Я серьезно, подскажите кто знает.

 Профиль  
                  
 
 Re: Кодировки в С++
Сообщение13.12.2012, 11:35 
Заслуженный участник
Аватара пользователя


06/10/08
6422
"Русской" и "английской" кодировок не бывает. Почитайте: http://habrahabr.ru/sandbox/47663/ В конце там очень кратко написано, что делать со строками с C++.

 Профиль  
                  
 
 Re: Кодировки в С++
Сообщение13.12.2012, 14:01 
Заслуженный участник


09/09/10
3729
Вам надо всюду вместо char и std::string пользоваться wchar_t и std::wstring, а приложение собирать с включенной опцией UNICODE — хотя я не уверен, с какой версии C++ Builder поддерживает wide-компоненты... боюсь, что с очень поздней.

 Профиль  
                  
 
 Re: Кодировки в С++
Сообщение13.12.2012, 17:27 


03/10/06
826
Набор компонент TNTUnicode вам в помощь.

 Профиль  
                  
 
 Re: Кодировки в С++
Сообщение16.12.2012, 17:54 
Аватара пользователя


15/01/12
87
г. Москва
В свою очередь приведу статью Спольски - Абсолютный минимум, который каждый разработчик программного обеспечения обязательно должен знать о Unicode и наборах символов.

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

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

 Профиль  
                  
 
 Re: Кодировки в С++
Сообщение11.01.2013, 02:03 
Заслуженный участник


09/09/10
3729
Потому что вы при вызове SaveToFile() не указываете кодировку? По умолчанию используется системная ANSI-кодировка, поэтому ваши юникод-строки перегоняются в ANSI, а при этом вполне возможно, что символы с диакритикой будут заменяться на символы без нее.

 Профиль  
                  
 
 Re: Кодировки в С++
Сообщение11.01.2013, 18:51 


04/12/12
11
Понял. Спасибо.
Оказывается, вот так пишется: file->SaveToFile(FileName, TEncoding::Unicode); аналогично и с LoadFromFile. А я-то думал...

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group