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

base64decode с русскими символами - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Потоковый ввод/вывод текста http://www.cyberforum.ru/cpp-beginners/thread687481.html
Добрый день! Помогите пожалуйста разобраться. Почему при вводе текста в консоли, он сохраняется каракулями? #include <cstdlib> #include <iostream> #include <fstream> using namespace std;
C++ Насколько лучше Visual Studio2012 Visual Studio2010 Подскажите кто уже работает с последней версией VC , сильно ли она отличаеться от прежней http://www.cyberforum.ru/cpp-beginners/thread687474.html
C++ Список внутренних телефонов организации с разбивкой по отделам.Количества отделов и телефонов внутри отдела задать самостоятельно.
Список внутренних телефонов организации с разбивкой по отделам.Количества отделов и телефонов внутри отдела задать самостоятельно.Составить модуль поиска всех телефонов с заданными двумя первыми цифрами. Пожалуйста помогите!Заранее спасибо!
Выполнить циклический сдвиг двумерного массива по горизонтали слева направо C++
Выполинте циклический сдвиг двумерного массива по горизонтали слева направо. Написал ввод и вывод,а вот сдвинуть ни как не получакться. Добавлено через 22 минуты help,мб кто знает.
C++ Радиокнопки и Переключатель http://www.cyberforum.ru/cpp-beginners/thread687445.html
подскажите что такое Радиокнопки и переключатель в C ++.если можно приведите пример.плиииз))
C++ Директория в Borland C++ Подскажите что нужно прописывать в: Output Directory и в Sourse Directories А то выходят ошибки что такая библиотека не найдена Добавлено через 57 минут Unable to open include file 'IOSTREAM' Unable to open include file 'CSTLIB' подробнее

Показать сообщение отдельно
NapalmRain
 Аватар для NapalmRain
37 / 37 / 2
Регистрация: 18.05.2010
Сообщений: 624
03.11.2012, 12:09     base64decode с русскими символами
приветствую всех!
Возникла необходимость декодировать сроку закодированную base64. Пришёл к такому выводу, пользуясь онлайн декодерами. Строки, изначально написанные только латинскими символами и/или цифрами декодириются корректно, а вот с русскими получаешься в результате абра кадабра.
Прошу подсказать, как реализовать декодирование средствами си++, что бы оно шло корректно и с русскими буквами. пользуюсь builder 6
заранее благодарю

Добавлено через 44 минуты
Начинаю подозревать, что кодировка и не base64 вовсе... Если кто-то знает, прошу помочь.
Исходная строка:
Код
TAAxADkA
правильный результат:
Код
L19
Результат онлайн декодера:
Код
L19
Результат функции:
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
std::string base64_decode(std::string const& encoded_string) {
  int in_len = encoded_string.size();
  int i = 0;
  int j = 0;
  int in_ = 0;
  unsigned char char_array_4[4], char_array_3[3];
  std::string ret;
 
  while (in_len-- && ( encoded_string[in_] != '=') && is_base64(encoded_string[in_])) {
    char_array_4[i++] = encoded_string[in_]; in_++;
    if (i ==4) {
      for (i = 0; i <4; i++)
        char_array_4[i] = base64_chars.find(char_array_4[i]);
 
      char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
      char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
      char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
 
      for (i = 0; (i < 3); i++)
        ret += char_array_3[i];
      i = 0;
    }
  }
 
  if (i) {
    for (j = i; j <4; j++)
      char_array_4[j] = 0;
 
    for (j = 0; j <4; j++)
      char_array_4[j] = base64_chars.find(char_array_4[j]);
 
    char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
    char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
    char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
 
    for (j = 0; (j < i - 1); j++) ret += char_array_3[j];
  }
 
  return ret;
}
Код
L
тут вроде как всё понятно, не ясно только где ошибка в декодировании на си++, но если строка русская, то
исходная строка:
Код
MAQgADcEMARHBDUEPAQgAEAENQQ7BD4EMwQ/ACAAPgQeBA==
правильный результат:
Код
а зачем релог? оО
результат онлайн декодера:
Код
0 70G5< @5;>3? >
результат вышеуказанной функции
Код
0
Хотя бы небольшой намёк в сторону, где я не прав
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 23:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru