Listing 2
// Read/write via long char-type; replace encoding errors.
int main()
{
using namespace std;
using namespace UTF8Lib;
typedef UTF8Filestream<long> UTF8LFilestream;
typedef UTF8Streambuf <long> UTF8LStreambuf;
UTF8LFilestream fin ("utf8_test.txt", ios_base::in );
UTF8LFilestream fout("utf8_test2.txt", ios_base::out);
for(;;) {
long ch;
if(!fin.get(ch)) {
UTF8LStreambuf::buffer_state_type state;
state = fin.rdbuf()->get_state();
if(state == UTF8LStreambuf::RD_EOF) break; // done...!
switch(state)
{
case UTF8LStreambuf::RD_LEAD_INVAL : ch = 'L'; break;
case UTF8LStreambuf::RD_CONT_INVAL : ch = 'C'; break;
case UTF8LStreambuf::RD_NONSHORT : ch = 'N'; break;
case UTF8LStreambuf::RD_UNICODE_INVAL: ch = 'U'; break;
case UTF8LStreambuf::RD_OVERFLOW : ch = 'O'; break;
default: assert(!"Invalid converter state.");
}
fin.clear();
}
fout.put(ch);
}
}