Помощь - Поиск - Пользователи - Календарь
Полная версия: вывод текста на русском
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
blackhard
Подскажите как корректно вывести содержимое файла если он содержит текст на русском?просто для вывода содержимого файла на экран я написал такую функцию
int outf(FILE *fz,char *s)
{
char c;
if((fz=fopen(s,"r"))==NULL) Error(2,s);
else
{
while(( c=getc(fz))!=EOF)
putchar©;
fclose(fz);
}
return 1;
}
если текст написан латинскими символами все работает отлично.А если на русском то выводит бред ,и то не полностью.как это исправить?
volvo
Компилятор? Кодировка файла? Какой язык установлен в системе для Non-Unicode?
blackhard
Цитата(volvo @ 19.03.2008 17:33) *

Компилятор? Кодировка файла? Какой язык установлен в системе для Non-Unicode?

компилятор vs6 кодировка файла ansi.Какой язык установлен в системе для Non-Unicode? где посмотреть?
spill
Программа запускается под DOS? Если да, то просто установи русификатор (то есть не установи, а запускай каждый раз). Например, rkalt. Ну, они в принципе, друг от друга ни чем не отличаются
volvo
Цитата
где посмотреть?
Панель управления -> Региональные настройки -> последняя вкладка...
blackhard
Цитата(volvo @ 19.03.2008 18:18) *

Панель управления -> Региональные настройки -> последняя вкладка...

установлен русский
andriano
Обычно в Windows используется кодовая страница 1251, в консоли и DOS - 866, а в Unix - КОИ-8.
В виндах кодировка 1251 называется ANSI, а 866 - OEM.
volvo
Читай построчно и конвертируй AnsiToOem:

  char st[255];
...
while((fgets(st, 255, fz))) {
AnsiToOem(st, st);
puts(st);
}

Можешь читать и посимвольно, но тогда для конвертации придется извратиться smile.gif
blackhard
Цитата(volvo @ 19.03.2008 18:25) *

Читай построчно и конвертируй AnsiToOem:

  char st[255];
...
while((fgets(st, 255, fz))) {
AnsiToOem(st, st);
puts(st);
}

Можешь читать и посимвольно, но тогда для конвертации придется извратиться smile.gif

раз уш речь пошла о построчном чтении как мне файл в массив строк записать?
FILE *fz;
char *c[12];
int i=0;
if((fz=fopen("fileini.ini","r"))==NULL) printf("error\n");
else
{
while( (fgets(c[i],256,fz)))
{

i++;

}
}

я пробовал так но оно не работает

Добавлено через 4 мин.
все по поводу построчного чтения я уже разобрался
fgets(v,80,fz);
c[i]=v;
i++;
так работает
блин не правиль работает в каждой строке c[i] одна и таже строка из файла.как правильно сделать вывод?
о все теперь я нашел ошибку все заработало
volvo
Вот так не пробовал:

char* c[10]; // для хранения строк
char st[255]; // буфер для чтения строки из файла

int i = 0;
while((fgets(st, 255, fz))) {
c[i++] = strdup(st);
}


? smile.gif
blackhard
Цитата(volvo @ 19.03.2008 18:43) *

Вот так не пробовал:

char* c[10]; // для хранения строк
char st[255]; // буфер для чтения строки из файла

int i = 0;
while((fgets(st, 255, fz))) {
c[i++] = strdup(st);
}


? smile.gif

да спасибо большое токо что сам так сделал good.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.