Unicode->Ansi проблемы с русскими буквами

Тема в разделе "WASM.WIN32", создана пользователем xdd, 23 апр 2009.

  1. xdd

    xdd New Member

    Публикаций:
    0
    Регистрация:
    7 апр 2009
    Сообщения:
    13
    Собственно сабж, перепробывал способы с WideCharToMultyByte, так же пробовал с wcstombs результат никакой, нормально отображаются только английские буквы (:
    кто нибудь сталкивался с такой проблемой?
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Нет.
     
  3. xdd

    xdd New Member

    Публикаций:
    0
    Регистрация:
    7 апр 2009
    Сообщения:
    13
    Booster
    информативный ответ, а по делу?
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    xdd
    Ну так я и по-делу, никогда не встречал проблем с этим. Что хоть она возвращает?
     
  5. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    xdd
    информативный вопрос - информативный ответ
    кидай код и будет видно
     
  6. xdd

    xdd New Member

    Публикаций:
    0
    Регистрация:
    7 апр 2009
    Сообщения:
    13
    Booster
    ну переводит английские буквы она как надо, а вот русские выдает в виде "кракозябр", хотя CodePage установлен 1251, так же
    setlocale (LC_CTYPE, "Russian_Russia.1251") + wcstombs ситуацию не изменили ...
     
  7. xdd

    xdd New Member

    Публикаций:
    0
    Регистрация:
    7 апр 2009
    Сообщения:
    13
    char* ToAnsi(WCHAR *String)
    {
    typedef char * (*MSETLOCALE )(int, const char *);
    typedef size_t (*MWCSTOMBS)( char *, const wchar_t *, size_t );

    MSETLOCALE psetlocale = (MSETLOCALE)GetProcAddress( LoadLibrary("msvcrt.dll"), "setlocale" );
    MWCSTOMBS pwcstombs = (MWCSTOMBS)GetProcAddress( LoadLibrary("msvcrt.dll"), "wcstombs" );

    int l = WideCharToMultiByte (1251, 0, String, -1, 0, 0, NULL, NULL);
    char *r = (char*)VirtualAlloc( NULL, l, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE );

    psetlocale (LC_CTYPE, "Russian_Russia.1251");
    pwcstombs( r, String, l );

    return r;
    }

    -----

    char* ToAnsi(WCHAR *String)
    {
    int l = WideCharToMultiByte (1251, 0, String, -1, 0, 0, NULL, NULL);
    char *r = (char*)VirtualAlloc( NULL, l, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE );

    WideCharToMultiByte (1251, 0, String, -1, r, l, NULL, NULL);

    return r;
    }
     
  8. xdd

    xdd New Member

    Публикаций:
    0
    Регистрация:
    7 апр 2009
    Сообщения:
    13
    блин вставить тег кода забыл, а редактирование убрали (:
    вот внятно:
    Код (Text):
    1. char* ToAnsi(WCHAR *String)
    2. {
    3.     typedef char * (*MSETLOCALE )(int, const char *);
    4.     typedef size_t (*MWCSTOMBS)( char *, const wchar_t *, size_t );
    5.    
    6.     MSETLOCALE psetlocale = (MSETLOCALE)GetProcAddress( LoadLibrary("msvcrt.dll"), "setlocale" );
    7.     MWCSTOMBS  pwcstombs  = (MWCSTOMBS)GetProcAddress( LoadLibrary("msvcrt.dll"), "wcstombs" );
    8.  
    9.     int l = WideCharToMultiByte (1251, 0, String, -1, 0, 0, NULL, NULL);
    10.     char *r = (char*)VirtualAlloc( NULL, l, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE );
    11.  
    12.     psetlocale (LC_CTYPE, "Russian_Russia.1251");
    13.     pwcstombs( r, String, l );
    14.  
    15.     return r;
    16. }
    17.  
    18. -----
    19.  
    20. char* ToAnsi(WCHAR *String)
    21. {
    22.     int l = WideCharToMultiByte (1251, 0, String, -1, 0, 0, NULL, NULL);
    23.     char *r = (char*)VirtualAlloc( NULL, l, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE );
    24.  
    25.     WideCharToMultiByte (1251, 0, String, -1, r, l, NULL, NULL);
    26.  
    27.     return r;
    28. }
     
  9. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Поставь в первом параметре вместо 1251, 0
     
  10. xdd

    xdd New Member

    Публикаций:
    0
    Регистрация:
    7 апр 2009
    Сообщения:
    13
    всем мои дикие извинения :)
    туплю второй день, оказывается переводит все правильно просто дальше идёт работа с рег. выражениями, видимо там криво переводится, вобщем тему можно закрыть, всем спасибо :)