(C++) Return Email Headers as iso-8859-15? (or any other charset)
Question:
In C++, is it somehow possible to specify a desired charset (like ISO-8859-15) when getting mail headers with POP3?
Answer:
Instead of calling the method that returns a “const char *” — which can return either utf-8 or ANSI (see this Chilkat blog post about the Utf8 property common to all Chilkat C++ classes), call the alternate method that returns the string in a CkString object. You can then get the iso-8859-15 string from the CkString object.
Each Chilkat C++ method that returns a string has two versions — an upper-case version that returns the string in a CkString (always the last argument), and a lower-case version that returns a “const char *”.
For example, in the CkEmail class:
bool GetHeaderField(const char *fieldName, CkString &outFieldValue); const char *getHeaderField(const char *fieldName);
The lower-case method returning a “const char *” returns a pointer to memory that may be overwritten in subsequent calls. Therefore, make sure to copy the string to a safe place immediately before making additional calls on the same Chilkat object instance. (Only methods that also return “const char *” would overwrite the memory from a previous call.)
The upper-case version of the method returns the string in a CkString object. It is an output-only argument, meaning that the CkString contents are replaced, not appended. To get the iso-8859-15 string from the CkString, call the getEnc method. For example:
const char *str_iso_8859_15 = outFieldValue.getEnc("iso-8859-15");
This returns a NULL-terminated string where each character is represented as a single byte using the iso-8859-15 encoding.