cpp-base64 icon indicating copy to clipboard operation
cpp-base64 copied to clipboard

can't decode base64-encoded data with linebreaks

Open a1021101652 opened this issue 3 years ago • 1 comments

Can't remove '\n' directly at here ,because of the character not in standard base64-encoded data ,but i don't know better solution

issue at :base64.cpp:171 ` if (remove_linebreaks) {

   std::string copy(encoded_string);

   copy.erase(std::remove(copy.begin(), copy.end(), '\n'), copy.end());

   return base64_decode(copy, false);
}`

a1021101652 avatar Jan 12 '23 06:01 a1021101652

Windows linefeed is \r\n Old MacOS linefeed is \r. New MacOS versions is \n Linux linefeed is \n.

To avoid errors on decode, try removing all spacing chars \r, \n, \t, \v, \f, \000

Example

#include <string>
#include <iostream>
#include <vector>

void removeSubstrings(std::string& str, const std::vector<std::string>& toRemove) {
    for (const auto& subStr : toRemove) {
        size_t pos;
        while ((pos = str.find(subStr)) != std::string::npos) {
            str.erase(pos, subStr.length());
        }
    }
}

int main() {
    std::string str = "String\n with\t text\r that must be removed 😑😀!!!";
    std::vector<std::string> toRemove = {"\r", "\n", "\t", "😑"};

    removeSubstrings(str, toRemove);

    std::cout << "Result: " << str << std::endl;

    return 0;
}

Output

Result: String with text that must be removed 😀!!!

Satancito avatar May 20 '24 07:05 Satancito