Unicode версия base64 кодирования / декодирования - PullRequest
4 голосов
/ 11 января 2011

Я использую base64 кодирование / декодирование из http://www.adp -gmbh.ch / cpp / common / base64.html

Хорошо работает со следующим кодом.

  const std::string s = "I Am A Big Fat Cat" ;

  std::string encoded = base64_encode(reinterpret_cast<const unsigned char*>(s.c_str()), s.length());
  std::string decoded = base64_decode(encoded);

  std::cout << _T("encoded: ") << encoded << std::endl;
  std::cout << _T("decoded: ") << decoded << std::endl;

Однако, когда приходит Unicode

namespace std
{
#ifdef _UNICODE
    typedef wstring tstring;
#else
    typedef string tstring;
#endif
}
const std::tstring s = _T("I Am A Big Fat Cat");

Как я могу все еще использовать вышеупомянутую функцию?

Просто меняется

std::string base64_encode(unsigned TCHAR const* , unsigned int len);
std::tstring base64_decode(std::string const& s);

не будет работать правильно.

(я ожидаю, что base64_encode вернет ASCII. Следовательно, вместо std :: tstring следует использовать std :: string)

1 Ответ

4 голосов
/ 11 января 2011

Base64 кодирует двоичные данные в виде текста.Так что вам просто нужно конвертировать ваши широкие символы в соответствующие им байты, используя wcstombs & co , и все готово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...