【问题标题】:Unicode version of base64 encoding/ decodingUnicode 版本的 base64 编码/解码
【发布时间】:2012-07-13 04:21:36
【问题描述】:

我正在使用来自http://www.adp-gmbh.ch/cpp/common/base64.html的base64编码/解码

下面的代码效果很好。

  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::string 而不是 std::tstring)

【问题讨论】:

  • 您是否尝试过其他编码器?这个给std::stringcode.google.com/p/stringencoders/source/browse/trunk/src/…
  • 你的“仅仅改变”不起作用的症状是什么?我可能希望字符串被截断,因为长度是用字符而不是字节指定的,否则应该没问题。
  • 你不应该向std命名空间添加东西。
  • 支持 Unicode 是指要对 wstrings 进行 base64 编码 (L"ABC" → "QUJD"),还是要对 wstrings 进行 base64 编码 ("ABC" → L “QUJD”)?

标签: c++ base64


【解决方案1】:

Base64 将二进制数据编码为文本。因此,您只需使用 wcstombs & co 将宽字符转换为相应的字节即可。

【讨论】:

  • 在定义“它们对应的字节”时必须小心。给定_UNICODE 宏,我们可以假设是 Windows,然后是 UTF-16,但这只是一个合理的假设。
  • @MSalters:澄清一下。
猜你喜欢
  • 1970-01-01
  • 2016-04-01
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-28
  • 2019-12-19
相关资源
最近更新 更多