---
name: "iquotedprintablebuf"
section: "3bobcat"
platform: "linux"
package: "libbobcat-dev"
version: "6.07.01-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/iquotedprintablebuf"
---

# iquotedprintablebuf(3bobcat)

Input Filtering stream buffer doing quoted printable conversions

## NAME

FBB::IQuotedPrintableBuf - Input Filtering stream buffer doing quoted printable conversions

## SYNOPSIS

**#include \<bobcat/iquotedprintablebuf\>**\
 Linking option: *-lbobcat*

## DESCRIPTION

The information made available by **IQuotedPrintableBuf** objects is either quoted-printable encoded or decoded. The information to convert is read by **IQuotedPrintableBuf** objects via *std::istream* objects.

The class **IQuotedPrintableBuf** is a class template, using a *FBB::CryptType* template non-type parameter. Objects of the class **FBB::IQuotedPrintableBuf\<FBB::ENCODE\>** encode the information they receive, objects of the class **FBB::IQuotedPrintableBuf\<FBB::DECODE\>** decode the information they receive. See also section **ENUMERATION** below.

Quoted-printable encoding is sometimes used in e-mail attachments (See also https://en.wikipedia.org/wiki/Quoted-printable and https://www.ietf.org/rfc/rfc2045.txt (section 6.7)). Its main characteristics are:

- o

  Lines are at most 76 characters long;

- o

  Lines longer than 76 characters are split into sub-lines, using *=\\n* combinations to indicate \`soft line breaks’. Lines not ending in soft line breaks indicate true end of lines.

- o

  All printable characters, except for the *=* character and (final) blank characters just before the end of lines, are copied as-is, all other characters are escaped by writing *=XX* sequences, with XX being the ascii-character representation of the hexadecimal value of the escaped character (e.g., the *=* character is encoded as *=3D*, a final space before end-of-line is encoded as *=20*, a final tab as *=09*). Only capital letters are used when escaping characters.\

## NAMESPACE

**FBB**\
 All constructors, members, operators and manipulators, mentioned in this man-page, are defined in the namespace **FBB**.

## INHERITS FROM

**FBB::IFilterBuf**

## MEMBER FUNCTIONS

All members of **FBB::IFilterBuf** are available, as **IQuotedPrintableBuf** inherits from this class.

Overloaded move and/or copy assignment operators are not available.

## ENUMERATION

**IQuotedPrintableBuf** objects either encode or decode quoted-printable information. **IQuotedPrintableBuf** objects of the class **FBB::IQuotedPrintableBuf\<FBB::ENCODE\>** encode the data they receive, **IQuotedPrintableBuf** objects of the class **FBB::IQuotedPrintableBuf\<FBB::DECODE\>** decode the data they receive.

The values *ENCODE* and *DECODE* are defined in the *enum CryptType*, defined in the *FBB* namespace.

## CONSTRUCTOR

- o

  **IQuotedPrintableBuf\<CryptType\>(std::istream &in, size\_t bufSize** **= 1000)**:\
   This constructor initializes the streambuf.

-

  \- *IQuotedPrintableBuf\<ENCODE\>* objects perform quoted-printable encoding;\
   \- *IQuotedPrintableBuf\<DECODE\>* objects perform quoted-printable decoding;\
   \- *IQuotedPrintableBuf\<CryptType\>* objects obtain the bytes to encode or decode from *std::istream &in*;\
   \- The *IFilterBuf* base class is initialized with a buffer of size *bufSize*, using a lower bound of 100 characters.

-

  The constructor uses a configurable buffer size for reading. Characters read into the buffer which are not part of the actual quoted-printable encoded data are unavailable after completing the quoted-printable decoding. If information beyond the quoted-printable input block should remain available, then a buffer size of 1 should be specified.

Copy and move constructors (and assignment operators) are not available.

## EXAMPLE

The example shows the construction of *IQuotedPrintableBuf\<ENCODE\>* objects *encode* which are used to initialize a *std::istream* object. The information read from this *istream* is quoted-printable encoded.

*IQuotedPrintableBuf\<DECODE\>* objects read quoted-printable encoded information from *std::istream* objects, decoding the information.

The *std::istream din* object is initialized with the *IQuotedPrintableBuf\<DECODE\>* object, and its content is sent to *std::cout*. The information that is presented at *std::cin* and that appears at *std::cout* should be identical.

```
#include <iostream>
#include <istream>
#include <bobcat/iquotedprintablebuf>
using namespace std;
using namespace FBB;
int main(int argc, char **argv)
{
    if (argc == 1)
    {
        cout << "Usage: " << argv[0] << " [edb] < infile > outfile\n"
                    "to quoted printable -e-ncode, -d-ecode or -b-oth\n";
        return 0;
    }
    switch (argv[1][0])
    {
        case ’e’:
        {
            IQuotedPrintableBuf<ENCODE> encode(cin);
            istream ein(&encode);
            cout << ein.rdbuf();
        }
        break;
        case ’d’:
        {
            IQuotedPrintableBuf<DECODE> decode(cin);
            istream din(&decode);
            cout << din.rdbuf();
        }
        break;
        case ’b’:
        {
            IQuotedPrintableBuf<ENCODE> encode(cin);
            istream ein(&encode);
            IQuotedPrintableBuf<DECODE> decode(ein);
            istream din(&decode);
            cout << din.rdbuf();
        }
        break;
    }
}
```

## FILES

*bobcat/iquotedprintablebuf* - defines the class interface

## SEE ALSO

[**bobcat**(7)](/bobcat/7.md), [**isymcryptstreambuf**(3bobcat)](/isymcryptstreambuf/3bobcat.md), [**iquotedprintablestream**(3bobcat)](/iquotedprintablestream/3bobcat.md), [**ifilterbuf**(3bobcat)](/ifilterbuf/3bobcat.md), [**ofilterbuf**(3bobcat)](/ofilterbuf/3bobcat.md), **std::streambuf**.

## BUGS

None reported.

## BOBCAT PROJECT FILES

- o

  *https://fbb-git.gitlab.io/bobcat/*: gitlab project page;

Debian Bobcat project files:

- o

  *libbobcat6*: debian package containing the shared library, changelog and copyright note;

- o

  *libbobcat-dev*: debian package containing the static library, headers, manual pages, and developer info;

## BOBCAT

Bobcat is an acronym of \`Brokken’s Own Base Classes And Templates’.

## COPYRIGHT

This is free software, distributed under the terms of the GNU General Public License (GPL).

## AUTHOR

Frank B. Brokken (**f.b.brokken@rug.nl**).
