Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
12 / 12 / 9
Регистрация: 12.04.2012
Сообщений: 259

Инди и русские символы

30.07.2012, 18:18. Показов 3488. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Вот пытаюсь получить сраничку на маил ру мой мир "http://my.mail.ru/cgi-bin/login?" - эту
Вот код он просто получает страницу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form1->Memo1->Text=Form1->IdHTTP1->Get("http://my.mail.ru/cgi-bin/login?");
}
//---------------------------------------------------------------------------
И все бы хорошо если б не русские символы!
Они в не верной кодировке как я понял
Вот что мне преходит
g-complaint-link:after { content: 'Ïîæàëîâàòüñÿ' }
.g-complaint-link-action-progress:after { content: "Ïîäîæäèòå" }
.g-complaint-link-action-done:after { content: "Æàëîáà îòïðàâëåíà" }
.g-complaint-link-action-error:after { content: "Îøèáêà" }
.b-comments-add-border:before { content: "Âàø êîììåíòàðèé" }
.b-comments-add-border .comments-counter:after { content: " èç 500" }
.b-comments-textfield-error .comments-loader:before { content: 'Îøèáêà, ïîïðîáóéòå åù¸ ðàç.' }
.mob {background-color:#06c !important;}
Это кусок кода для примера!
Может кто работал уже со страницей мой мир и знает как нормально символы отобразить пробовал эти темы
Перевод из Utf8 в Builder 2009 не работает
Из Utf8 в Windows-1251 (HttpDownload->Get(Url))
не работает как была белиберда так и осталась вместо русский символов
ВНИМАНИЕ код страницы приведенный выше не взял в теги потому что если в теги берешь нормальные русские символы отображаются!!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.07.2012, 18:18
Ответы с готовыми решениями:

Инди и русские символы
Всем привет. IDE: RAD Studio XE. Передаю данные POST (Indy): TStringList *params = new TStringList(); ...

Русские символы
Как можно выводить русские символы в форме, а именно в Label-&gt;Caption Использовал это Label1-&gt;Caption=(char)random(256). Оно выводить...

Русские символы и memo
Добрый вечер. Пытаюсь сохранить содержимое Memo в текстовый файл: TextBBCode-&gt;Lines-&gt;SaveToFile(&quot;text.txt&quot;); ...

16
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.07.2012, 19:21
А ты уверен что там UTF-8 ?
У меня работал:
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
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) 
    {
        return NULL;
    }
    res = (wchar_t*)calloc(sizeof(wchar_t), res_len);
    if (res == NULL) 
    {
        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)
    {
        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) 
    {
        return NULL;
    }
    res = (char*)calloc(sizeof(char), res_len);
    if (res == NULL) 
    {
        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)
    {
        free(res);
        return NULL;
    }
    return res;
}
Также можно попробывать использовать Utf8ToAnsi()
0
12 / 12 / 9
Регистрация: 12.04.2012
Сообщений: 259
31.07.2012, 12:28  [ТС]
C++
1
2
3
String m="g-complaint-link:after { content: 'Ïîæàëîâàòüñÿ' }";
//Memo1->Lines->Add(utf8_to_unicode(m.c_str()));
Memo1->Lines->Add(unicode_to_1251(m.w_str()));
Так у меня не работает может не правильно что прописываю?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
31.07.2012, 12:43
C++
1
2
String m=L"g-complaint-link:after { content: 'Пожаловаться' }";
Memo1->Lines->Add(unicode_to_1251( AnsiString(m).c_str() ) );
Либо
C++
1
2
AnsiString m="g-complaint-link:after { content: 'Пожаловаться' }";
Memo1->Lines->Add(unicode_to_1251( m.c_str() ) );
0
12 / 12 / 9
Регистрация: 12.04.2012
Сообщений: 259
31.07.2012, 16:54  [ТС]
Так ведь функция
C++
1
char * unicode_to_1251(wchar_t *unicode_string)
Принимает значения только wchar_t
Так что не работают оба варианта у меня
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
31.07.2012, 17:05
Я имел ввиду
C++
1
wchar_t * utf8_to_unicode(char *utf8_string)
А тебе что во что конвертить надо?
А то по огрызкам кода нифига не понятно.
0
12 / 12 / 9
Регистрация: 12.04.2012
Сообщений: 259
31.07.2012, 21:04  [ТС]
Я уже оба способа пробовал не один не второй не приводит к тому что вот такая билеберда Ïîäîæäèòå стала понятна

Добавлено через 1 час 19 минут
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
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)
    {
        return NULL;
    }
    res = (wchar_t*)calloc(sizeof(wchar_t), res_len);
    if (res == NULL)
    {
        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)
    {
        free(res);
        return NULL;
    }
    return res;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString m="Iiai?aeoa";
Memo1->Lines->Add(utf8_to_unicode( m.c_str() ) );
} 
После этого в мемо вот что="Iiai?aeoa"
//---------------------------------------------------------------------------
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
31.07.2012, 21:27
C++
1
Memo1->Lines->Add(utf8_to_unicode( AnsiString(m).c_str() ) ); // !!! Ansi !!!
0
12 / 12 / 9
Регистрация: 12.04.2012
Сообщений: 259
31.07.2012, 22:07  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
C++
1
Memo1->Lines->Add(utf8_to_unicode( AnsiString(m).c_str() ) ); // !!! Ansi !!!
Скажи ты это сам проверял у меня по прежднему не работает!
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
31.07.2012, 22:11
Сверься с таблицами сиволов кодировок и убедись что там действительно UTF-8 ( у меня работало )

Добавлено через 1 минуту
http://www.artlebedev.ru/tools/decoder/ Говорит что там не UTF-8

Посмотри тут https://www.cyberforum.ru/blog... og513.html в проекте есть файл с ф-циями декодирования
0
12 / 12 / 9
Регистрация: 12.04.2012
Сообщений: 259
01.08.2012, 09:22  [ТС]
Ну вроде нашел надо из CP1252 во что то перекодировать) Ищу функцию для этого
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
01.08.2012, 13:22
а про koi8-r он и не думал...
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
01.08.2012, 14:46
- не, камрад на правильном пути...
Миниатюры
Инди и русские символы  
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.08.2012, 14:51
Ну как я понимаю в действительности это не cp1252, а просто не дочет разработчиков инди относительно юникода
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//--------------------------- из блога файл converts.h --------------------------------------
String WinToUnicode(const String St)
{
 String Result="";
 for (int i = 1; i <= St.Length(); i++)
 {
  if (int(St[i])>= 0x00C0 && int(St[i])<= 0x00FF)
    Result += wchar_t(int(St[i])+0x350);
  else Result += St[i];
 }
 return Result;
}
//------------------------------------------------------------------------------
0
12 / 12 / 9
Регистрация: 12.04.2012
Сообщений: 259
01.08.2012, 16:24  [ТС]
У меня всегда одно итоже получается из этого Ïîæàëîâàòüñÿ это: Ii?aeiaaouny
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
String WinToUnicode(const String St)
{
 String Result="";
 for (int i = 1; i <= St.Length(); i++)
 {
  if (int(St[i])>= 0x00C0 && int(St[i])<= 0x00FF)
    Result += wchar_t(int(St[i])+0x350);
  else Result += St[i];
 }
 return Result;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//String m="Ïîæàëîâàòüñÿ";
UnicodeString m="Ïîæàëîâàòüñÿ";
Memo1->Lines->Add(WinToUnicode(m));
}
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.08.2012, 17:06
Дожились скопипастить уже не можем...

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
//---------------------------------------------------------------------------
#include <vcl.h>
#include <memory>
#pragma hdrstop
 
#include "Unit1.h"
/*
#include <IdBaseComponent.hpp>
#include <IdComponent.hpp>
#include <IdHTTP.hpp>
#include <IdTCPClient.hpp>
#include <IdTCPConnection.hpp>
*/
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//--------------- из блога файл converts.h --------------------------------------
String WinToUnicode(const String St)
{
 String Result="";
 for (int i = 1; i <= St.Length(); i++)
 {
  if (int(St[i])>= 0x00C0 && int(St[i])<= 0x00FF)
    Result += wchar_t(int(St[i])+0x350);
  else Result += St[i];
 }
 return Result;
}
//------------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
std::auto_ptr<TIdHTTP> IdHTTP1(new TIdHTTP(this) );
Memo1->Text= WinToUnicode( IdHTTP1->Get("http://my.mail.ru/cgi-bin/login?") );
}
//---------------------------------------------------------------------------
Миниатюры
Инди и русские символы  
Вложения
Тип файла: rar Кодировка и IdHTTP.rar (351.9 Кб, 24 просмотров)
1
12 / 12 / 9
Регистрация: 12.04.2012
Сообщений: 259
01.08.2012, 20:58  [ТС]
Спасибо большое !!)))
Закрывайте тему
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.08.2012, 20:58
Помогаю со студенческими работами здесь

Русские символы и html
Получаю страницу html с помощью IdHTTP и вместо русских символов каракули. Вот страница &lt;!DOCTYPE html&gt; &lt;!--&gt;&lt;html...

Кодировка. Русские символы
Есть строка в неизвестной кодировке, приходит по сети через сокет в массив char. Выглядит так: Привет С другой стороны...

Русские символы в StringGrid
Мне нужно в stringGrid загрузить русские символы. А он вместо них выводит квадратики в ячейки(как бывает когда символ не определен)....

C++ Builder 2009 Русские символы в ANSI
Доброго времени суток, сегодня поставил C++ Builder 2009, учусь пока что, вот начал писать небольшую программу, но почти сразу возникла...

Не показывает русские символы при GET запросе
try { IdHTTP-&gt;Post(&quot;http://www.lcgame.ru/auth/login/&quot;, s); //Процесс логина } catch(EIdHTTPProtocolException &amp;e) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru