печать кириллицы в Си

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Дикс, 16 Jan 2009.

  1. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    вопроса даже два:
    первое - какой шрифт поставить в microsoft visual c++, чтобы там отображалась кириллица и код выглядел нормально
    а второе - какой функцией перекодировать текст? вроде charToOem - но я не могу найти никаких примеров её использования.
     
  2. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    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 - в браузер валится какая-то нездоровая каша.
     
    #2 Дикс, 16 Jan 2009
    Last edited: 16 Jan 2009
  3. VAran

    VAran Elder - Старейшина

    Joined:
    29 May 2008
    Messages:
    51
    Likes Received:
    15
    Reputations:
    4
    PHP:
    ostream &operator<<(ostream &obj,char *strWin)
    {
        
    char strDos[4096];
        
    CharToOem(strWin,strDos);
        
    obj.write(strDos,strlen(strDos));
        return 
    obj;
    }
     
  4. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    system("chcp 1251 > nul"); в самом начале программы напиши.

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


    P.S. VAran, ему на C надо было.
     
    #4 nerezus, 16 Jan 2009
    Last edited: 16 Jan 2009
    2 people like this.
  5. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    nerezus
    спасибо огромное!
    а нас даже в универе на первом курсе учили и предлагали в качестве решения этой проблемы - перекодировку.
    она канает в консоли, а в браузере нет.
    а щас всё отлично заработало!
    очень признателен
     
  6. VAran

    VAran Elder - Старейшина

    Joined:
    29 May 2008
    Messages:
    51
    Likes Received:
    15
    Reputations:
    4
    это и есть си.
    перегружен оператор потока вывода <<
     
  7. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    пытаюсь юзать 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 - программа вылетает с эксепшеном
     
  8. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    > когда строка напечатана в ms visual studio - на странице каша
    У меня все норально. Какая версия студии?
     
  9. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    Это не C.
    Учи матчасть.
     
  10. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    версия 6.0
    щас даже если печатаю - эксепшен
     
  11. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    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()) - вылетает с эксепш.
    если нет пробела - кажет кашу
     
  12. __mad

    __mad Elder - Старейшина

    Joined:
    4 Nov 2007
    Messages:
    100
    Likes Received:
    38
    Reputations:
    7
    так "вапвкап ап" в какой у тебя кодировке? даж точней в какой кодировки сам файик который ты компилишь?
    если ты говоришь браузеру что это утф8 то и текст

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

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

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    нет, это как раз работает. эксепшн возникает только если строка содержит пробел. без пробела всё норм.

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

    __mad Elder - Старейшина

    Joined:
    4 Nov 2007
    Messages:
    100
    Likes Received:
    38
    Reputations:
    7
    >>нет, это как раз работает. эксепшн возникает только если строка содержит пробел. без пробела всё норм.

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

    criz Elder - Старейшина

    Joined:
    4 Nov 2007
    Messages:
    293
    Likes Received:
    40
    Reputations:
    6
    Дикс, __mad прав.
    Code:
    #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;
    }
    
     
  16. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    Дык ты бы еще досовскую консольную юзал.
    Обновись, в последней версии проблемы такой нету ;)
     
  17. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    нас у универе именно по ней учат и на ней экзамен сдавать =\
     
  18. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    Поставь на ноут 2008 версию и делай на нем.
     
  19. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    о_О
    как ты узнал что у меня ноут?

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

    lll6 Elder - Старейшина

    Joined:
    29 Feb 2008
    Messages:
    83
    Likes Received:
    15
    Reputations:
    5
    Visual Studio 2008