Русский язык в программе

Модератор: Модераторы разделов

Аватара пользователя
pimiento
Сообщения: 6
ОС: OpenSuSE 10.3 x86_64

Русский язык в программе

Сообщение pimiento »

Пишу программу, которая через указатели выводить посимвольно текст.

Код:

#include <iostream> using namespace std; int main() { void disprstr(char*); char str[]="Что за отстой?!"; disprstr(str); return 0; } void disprstr(char* str) { while(*str) { cout<<*str++<<' '; } cout<<endl; }

При запуске вместо "Ч т о з а о т с т о й ? ! " она выводит "� � � � � � � � � � � � � � � � � � � � � � ? !"
А когда просто печатаешь символьный массив - нормально выводит русский текст. В чём может быть дело?
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Русский язык в программе

Сообщение watashiwa_daredeska »

pimiento писал(а):
09.10.2008 09:46
При запуске вместо "Ч т о з а о т с т о й ? ! " она выводит "� � � � � � � � � � � � � � � � � � � � � � ? !"
А когда просто печатаешь символьный массив - нормально выводит русский текст. В чём может быть дело?

Если кратко, в большинстве Linux'ов по умолчанию используется кодировка UTF-8, в которой символ кодируется 1..6 байтами. В частности, кириллица кодируется 2-мя байтами.

Однако прелесть Unicode в том, что даже если перекодировать строку так, чтобы каждый codepoint занимал фиксированно 32-битное число, один codepoint не всегда будет соответствовать одному глифу. Более того, у одного и того же глифа может быть несколько вариантов кодирования (в кириллице этим страдает "ё"). Подробности см. на http://unicode.org
Спасибо сказали:
Аватара пользователя
pimiento
Сообщения: 6
ОС: OpenSuSE 10.3 x86_64

Re: Русский язык в программе

Сообщение pimiento »

И чего делать теперь? Как выводить символы по указателям?
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Русский язык в программе

Сообщение watashiwa_daredeska »

pimiento писал(а):
09.10.2008 10:28
И чего делать теперь? Как выводить символы по указателям?

Никак. Можно выводить строки целиком. Для работы с текстом посимвольно можно воспользоваться, например, ICU.
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Русский язык в программе

Сообщение Zeus »

А что за цель такая - выводить строки по-символьно?
Спасибо сказали:
Аватара пользователя
pimiento
Сообщения: 6
ОС: OpenSuSE 10.3 x86_64

Re: Русский язык в программе

Сообщение pimiento »

В хозяйстве пригодится может :)
Спасибо сказали:
MiK13
Сообщения: 1293
ОС: Linux Debian

Re: Русский язык в программе

Сообщение MiK13 »

pimiento писал(а):
09.10.2008 10:28
И чего делать теперь? Как выводить символы по указателям?

Как всегда. Только надо понимать как происходит вывод на самом деле.
Т.е. понимать, что для компьютера таких понятий как буква, цифра и т.п. не существует в принципе. Они есть только в представлении человека.
А компьютер выполняет просто передачу последовательности байтов. А уже как эта последовательность байтов будет отображаться на экране, определяется устройством вывода.

Кстати, советую убрать вывод пробела после вывода очередного байта и посмотреть, что получится.
Спасибо сказали: