Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   печать кириллицы в Си (https://forum.antichat.xyz/showthread.php?t=101485)

Дикс 16.01.2009 10:06

печать кириллицы в Си
 
вопроса даже два:
первое - какой шрифт поставить в microsoft visual c++, чтобы там отображалась кириллица и код выглядел нормально
а второе - какой функцией перекодировать текст? вроде charToOem - но я не могу найти никаких примеров её использования.

Дикс 16.01.2009 10:12

PHP код:

#include <windows.h>

int main(void){

    
char buffer[20];
    
CharToOem("Кириллица\n"buffer);

    
printf("%s%c%c\n%s""Content-Type:text/html;charset=windows-1251",13,10body);
    
printf(buffer);
    return 
0;


эм.. что в windows-1251, что в utf-8 - в браузер валится какая-то нездоровая каша.

VAran 16.01.2009 12:45

PHP код:

ostream &operator<<(ostream &obj,char *strWin)
{
    
char strDos[4096];
    
CharToOem(strWin,strDos);
    
obj.write(strDos,strlen(strDos));
    return 
obj;



nerezus 16.01.2009 13:16

system("chcp 1251 > nul"); в самом начале программы напиши.

С перекодировкай и прочими хаками ты портируемость ухудшишь.


P.S. VAran, ему на C надо было.

Дикс 16.01.2009 13:49

nerezus
спасибо огромное!
а нас даже в универе на первом курсе учили и предлагали в качестве решения этой проблемы - перекодировку.
она канает в консоли, а в браузере нет.
а щас всё отлично заработало!
очень признателен

VAran 16.01.2009 13:49

Цитата:

P.S. VAran, ему на C надо было.
это и есть си.
перегружен оператор потока вывода <<

Дикс 16.01.2009 13:59

пытаюсь юзать utf-8

PHP код:

    char body[] = "";
    
system("chcp 65001 > nul");
    
strcat(body"Кучерявый сидел перед камином");
    
printf("%s%c%c\n%s""Content-Type:text/html; charset=utf-8",13,10body); 

когда строка напечатана в ms visual studio - на странице каша
когда строку скопировал со странички в utf-8 - программа вылетает с эксепшеном

nerezus 16.01.2009 14:01

> когда строка напечатана в ms visual studio - на странице каша
У меня все норально. Какая версия студии?

nerezus 16.01.2009 14:01

Цитата:

это и есть си.
перегружен оператор потока вывода <<
Это не C.
Учи матчасть.

Дикс 16.01.2009 15:24

версия 6.0
щас даже если печатаю - эксепшен

Дикс 16.01.2009 15:32

PHP код:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void){

    
char *query getenv("QUERY_STRING");
    
char body[] = "";

    
system("chcp 65001 > nul"); // 1251 - windows-1251, 65001 - utf-8
    
strcat(body"вапвкап ап");
    
printf("%s%c%c\n%s""Content-Type:text/html;charset=utf-8",13,10body);
    
getchar();
    return 
0;


если в строке есть пробел - кажет кашу и после нажатия кнопки (для getchar()) - вылетает с эксепш.
если нет пробела - кажет кашу

__mad 16.01.2009 17:39

так "вапвкап ап" в какой у тебя кодировке? даж точней в какой кодировки сам файик который ты компилишь?
если ты говоришь браузеру что это утф8 то и текст

а экзепшен изза этого
char body[] = "";
strcat(body, "вапвкап ап");

ты записываешь строку в однобайтовый масив, возможно и изза это херня с выводом результата)

Дикс 16.01.2009 18:43

Цитата:

char body[] = "";
strcat(body, "вапвкап ап");

ты записываешь строку в однобайтовый масив
нет, это как раз работает. эксепшн возникает только если строка содержит пробел. без пробела всё норм.

а по поводу кодировки файла - этот мс визуал си++ словно написан в 98 году.
в нем не только кодировки файла нет, там даже нумерация строк кода отсутствует!
зато можно поставить часы в статус окна. идиотизм..

__mad 16.01.2009 19:44

>>нет, это как раз работает. эксепшн возникает только если строка содержит пробел. без пробела всё норм.

не нада херни говорить, очевидно же что записывая строку большей длины чем массив (локальный) мы перезаписываем стэк и тем самым адрес возварат, поэтому и возникает экзепшен при выходе из проги.
продебагь, и посмори чё творится со стеком.

criz 16.01.2009 20:55

Дикс, __mad прав.
Код:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define L 15

int main(int argc, char *argv[]){

    char *query = getenv("QUERY_STRING");
    char body[L] = " ";

    system("chcp 1251 > nul"); // 1251 - windows-1251, 65001 - utf-8
    strcat(body, "вапвкап ап");
    printf("%s%c%c\n%s", "Content-Type:text/html;charset=utf-8",13,10, body);
    getchar();
    return 0;
}


nerezus 16.01.2009 20:59

Цитата:

версия 6.0
щас даже если печатаю - эксепшен
Дык ты бы еще досовскую консольную юзал.
Обновись, в последней версии проблемы такой нету ;)

Дикс 17.01.2009 11:30

нас у универе именно по ней учат и на ней экзамен сдавать =\

nerezus 17.01.2009 13:29

Поставь на ноут 2008 версию и делай на нем.

Дикс 17.01.2009 17:55

о_О
как ты узнал что у меня ноут?

поставлю, кстати ни у кого нет ссылки на торрент Визуал Студио 2008 к примеру?

lll6 17.01.2009 18:01

Цитата:

Сообщение от Дикс
о_О
как ты узнал что у меня ноут?

поставлю, кстати ни у кого нет ссылки на торрент Визуал Студио 2008 к примеру?

Visual Studio 2008


Время: 22:25