powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / std::cout и перекодировка на лету
7 сообщений из 7, страница 1 из 1
std::cout и перекодировка на лету
    #33250229
ChameLe0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Предположим есть класс Encoder который может преобразовывать строки напримет из cp1251 в UTF-8.

хочется чтобы при написании конструкции std::cout<<"привет!"; автоматически выполнялось преобразование... Насколько я понимаю решение должно быть примерно таким

std::ostream& operator << (std::ostream& s, char* value)
{
TEncoder Encoder("cp1251","UTF-8");
return s<<Encoder.Convert(value);
};

int main(void){
std::cout<<"привет!";
};

Но что-то не получается... Вызывается все равно стандартный оператор <<
...
Рейтинг: 0 / 0
std::cout и перекодировка на лету
    #33250272
Фотография Radjaman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скорее д.б. что-то подобное:

class Encoder
{
protected:
char * Convert(char *from, char *to, char *qqq)
{ ... }
public:
ostream& operator << (char *value)
{
return cout << this->Convert("KOI-8", "1251", value);
}
};

void main()
{
Encoder qq;
qq<<"привет земляк";
}
...
Рейтинг: 0 / 0
std::cout и перекодировка на лету
    #33250599
ChameLe0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Думаю такое решение не подойдет - написана достаточно большая программа и возникла необходимость работы с несколькими кодировками без модификации всех исходников. Результат требуется путем переопределения оператора <<.
...
Рейтинг: 0 / 0
std::cout и перекодировка на лету
    #33250876
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChameLe0n
std::ostream& operator << (std::ostream& s, char* value)
{
TEncoder Encoder("cp1251","UTF-8");
return s<<Encoder.Convert(value);
};

Но что-то не получается... Вызывается все равно стандартный оператор <<
Все хорошо и красиво, но у тебя нет перегрузки (overloading) стандартного метода.
Вернее ты его переписал , но (видимо) линкер взял все равно стандартный или еще по каким-то причинам. Тебе нужно другой тип потока создать и делать overloading. Или унаследоваться от стандартного потока и переопределить метод вывода буфера строки в файл (или куда там), что вообще будет еще и легче, ибо только один метод нужно будет переписать. Правда я не знаю, возможно ли это.
...
Рейтинг: 0 / 0
std::cout и перекодировка на лету
    #33251003
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
замените cout на свой поток, в котором предусмотрите возможность изменения кодировки
...
Рейтинг: 0 / 0
std::cout и перекодировка на лету
    #33252648
ChameLe0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
заменил это:
int main(void){
std::cout<<"привет!";
};
на это
int main(void){
char str[]="привет!"
std::cout<<str;
};

Начал вызываться мой оператор << , притом рекурсивно... :(
...
Рейтинг: 0 / 0
std::cout и перекодировка на лету
    #33256863
Homosum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как же реализовать поддержку Юникода. Вообще расскажите кто как реализует поддержку Юникода.
Заранее спасибо.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / std::cout и перекодировка на лету
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]