编码字符串和解码字符串的差异
Difference in encoded and decoded string
我使用了zlib压缩来返回一个字符串。
void StatsClientImpl::sendToServer(std::stringstream &sstr) // to include an update interval version
{
std::string error_msg = "";
std::stringstream temp(AppState::getPid() + "," + AppState::getInstallOS());
temp << sstr.str();
std::string s = zlib_compress(temp.str());
.......
zlib_compress的定义如下:https://panthema.net/2007/0328-ZLibString.html
然后我做了:std::cout << s.size() <<"n";
字符串的大小显示为18。
然后我做了:
CURL *handle = curl_easy_init();
char* o = curl_easy_escape(handle, s.data(), s.size());
std::string bin(o);
std::cout << o <<"n";
char* i= curl_easy_unescape(handle, bin.data(), bin.size(), NULL);
std::string in(i);
std::cout << i << in.size() <<"n";
这给了我以下输出:
x%DA%D3%D1%81%80%E2%92%D2%B44%1D%03%00%1BW%03%E5
x??с??Ҵ413
x%DA%D3%D1%81%80%E2%92%D2%B44%1D%03
我把它作为输入字符串传递:
,,,,,,stuff,0
为什么解码字符串和编码字符串有区别?我该如何解决这个问题?
std::string in(i);
问题就在这里;这个std::string
构造函数需要一个以null结尾的字符串,因此它将数据截断到它找到的第一个0字节(在gzip输出的早期找到(。您想向curl_easy_unescape
询问未扫描的数据有多长,并相应地构造in
:
int sz=0;
char* i= curl_easy_unescape(handle, bin.data(), bin.size(), &sz);
std::string in(i, i+sz);
但我有个问题。为什么
bin(o)
中没有发生这种情况?
因为o
指向一个URL编码的字符串,除了终止符之外,它不包括空字节。
相关文章:
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- 字符串操作 - 字符计数
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 在C++中使用 UTF-8 字符串和字符
- 如何使用SQLite将数据库中的值导出为C / C++中的字符串或字符?
- 如何在C++中为字符串添加字符?
- C++ 无法将 std::vector<BYTE> 转换为字符串或字符数组
- C++完全复制要字符串的字符列表,而不会忽略多个空格
- 我如何知道字符串中字符相对于英文字母的位置值?
- 如何将 VB.Net 字符串作为字符*传递给C++dll?
- 如何在 Visual C++ 中使用 UTF-8 字符串作为字符*?
- C++ 字符串单个字符
- 将字符串逐个字符插入矢量
- C++11+=当RHS有多个字符串或字符时,运算符不起作用
- MSVC UTF8字符串编码使用了不正确的代码点
- C++,字符串到字符数组与我教授的局限性
- 向字符串添加字符
- 字符串到字符* 函数
- 通过c++主字符**参数处理不同字符串编码的正确方法是什么
- 如何将字符串编码为8位ASCII字符