Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Чем сконвертировать в русский язык такие крякозябры? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Проверка на ошибки http://www.cyberforum.ru/cpp/thread238924.html
старался написать прогу на C++ но там синтаксические ошибки(или несинтаксические) выдаёт, вродебы смотрел все верно, ребята посмотрите пожалуста, если есть ошибки исправьте если не трудно
C++ Поиск файлов в локальной сети Добрый день. Есть задача: написать программу для поиска файлов в локальной сети. Подскажите, пожалуйста, как это делается. http://www.cyberforum.ru/cpp/thread238846.html
C++ Распараллеливание на C++ и MPI
Задача состоит в том, чтобы написать параллельный алгоритм метода сопряженных градиентов для решения линейной системы. Непосредственно метод сопряженных градиентов сожержит на некоторых этапах:...
gethostbyname() возвращает 11004 C++
struct sockaddr_in addr; struct hostent* hp; int retval; retval = WSAStartup(MAKEWORD(1, 1), &wsa); if (retval != 0) return 1; hp = gethostbyname(host); if(retval == NULL) return...
C++ NIST STS http://www.cyberforum.ru/cpp/thread238268.html
Салют Кодеры! есть у кого-то скомпилированная версия NIST STS и желание поделиться?:) Буду признателен! Добавлено через 59 минут Проблемма решена!
C++ Редактор кода C++ с автоподстановкой Подскажите хороший редактор с автоподстановкой (завершением ввода) при написании кода на C++. подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
17944 / 6175 / 411
Регистрация: 30.03.2009
Сообщений: 16,950
Записей в блоге: 27
06.02.2011, 22:56  [ТС]
Нифига не понял.

C++
1
2
AnsiString a = "abc";
AnsiString b = qqq (a);
Что должно быть на месте qqq?

Добавлено через 19 минут
Вроде бы как разобрался. В моём случае надо будет сначала MultiByteToWideChar(CP_UTF8), а потом WideCharToMultiByte(1251)

Добавлено через 5 минут
Нашёл исходник. Взято отсюда. На тут случай, если ссылку сотрут, хотя бы упомяну, что автор - npak

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <windows.h>
#include <stdio.h>
 
wchar_t * utf8_to_unicode(char *utf8_string)
{
    int err;
    wchar_t * res;
    int res_len = MultiByteToWideChar(
        CP_UTF8,            // Code page
        0,                  // No flags
        utf8_string,        // Multibyte characters string
        -1,                 // The string is NULL terminated
        NULL,               // No buffer yet, allocate it later
        0                   // No buffer
        );
    if (res_len == 0) 
    {
        printf("Failed to obtain utf8 string length\n");
        return NULL;
    }
    res = calloc(sizeof(wchar_t), res_len);
    if (res == NULL) 
    {
        printf("Failed to allocate unicode string\n");
        return NULL;
    }
    err = MultiByteToWideChar(
        CP_UTF8,            // Code page
        0,                  // No flags
        utf8_string,        // Multibyte characters string
        -1,                 // The string is NULL terminated
        res,                // Output buffer
        res_len             // buffer size
        );
    if (err == 0)
    {
        printf("Failed to convert to unicode\n");
        free(res);
        return NULL;
    }
    return res;
}
 
char * unicode_to_1251(wchar_t *unicode_string)
{
    int err;
    char * res;
    int res_len = WideCharToMultiByte(
        1251,               // Code page
        0,                  // Default replacement of illegal chars
        unicode_string,     // Multibyte characters string
        -1,                 // Number of unicode chars is not known
        NULL,               // No buffer yet, allocate it later
        0,                  // No buffer
        NULL,               // Use system default
        NULL                // We are not interested whether the default char was used
        );
    if (res_len == 0) 
    {
        printf("Failed to obtain required cp1251 string length\n");
        return NULL;
    }
    res = calloc(sizeof(char), res_len);
    if (res == NULL) 
    {
        printf("Failed to allocate cp1251 string\n");
        return NULL;
    }
    err = WideCharToMultiByte(
        1251,               // Code page
        0,                  // Default replacement of illegal chars
        unicode_string,     // Multibyte characters string
        -1,                 // Number of unicode chars is not known
        res,                // Output buffer
        res_len,            // buffer size
        NULL,               // Use system default
        NULL                // We are not interested whether the default char was used
        );
    if (err == 0)
    {
        printf("Failed to convert from unicode\n");
        free(res);
        return NULL;
    }
    return res;
}
 
int main(int argc, char ** argv)
{
    char utf8_string[] = "UTF-8 + СЂСѓСЃСЃРєРёР№ текст";
    wchar_t * unicode_string;
    char * cp1251_string;
 
    unicode_string = utf8_to_unicode(utf8_string);
    if (unicode_string == NULL)
    {
        printf("Failed to convert!\n" );
        return 1;
    }
    MessageBoxW(NULL, unicode_string, L"Unicode", 0);
    cp1251_string = unicode_to_1251(unicode_string);
    free(unicode_string);
    if (cp1251_string == NULL)
    {
        printf("Failed to convert from unicode!\n");
        return 2;
    }
    MessageBoxA(NULL, cp1251_string, "CP1251", 0);
    return 0;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru