#include "iso885915.h"
#include "jisx0201.h"
#include "jisx0208.h"
+#include "utf16.h"
#include "utf8.h"
#include "windows1252.h"
Decoder *dec = create_decoder(IGNORE_ERRORS);
bool result = true;
- for(string::const_iterator i=str.begin(); (result && i!=str.end()); )
+ for(auto i=str.begin(); (result && i!=str.end()); )
result = (dec->decode_char(str, i)!=-1);
delete dec;
void Codec::Encoder::encode(const ustring &str, string &buf)
{
- for(ustring::const_iterator i=str.begin(); i!=str.end(); ++i)
- encode_char(*i, buf);
+ for(unichar c: str)
+ encode_char(c, buf);
}
string Codec::Encoder::encode(const ustring &str)
void Codec::Decoder::decode(const string &str, ustring &buf)
{
- for(string::const_iterator i=str.begin(); i!=str.end();)
+ for(auto i=str.begin(); i!=str.end();)
{
unichar c = decode_char(str, i);
if(c!=-1)
else if(em_str=="trans" || em_str=="transliterate")
em = TRANSLITERATE;
else
- throw invalid_argument("invalid error mode");
+ throw invalid_argument("StringCodec::create_codec");
}
if(name=="ascii") return new Ascii(em);
if(name=="jisx0201") return new JisX0201(em);
if(name=="jisx0208") return new JisX0208(em);
if(name=="utf8") return new Utf8(em);
+ if(name=="utf16") return new Utf16(em, Utf16::AUTO);
+ if(name=="utf16be") return new Utf16(em, Utf16::BIG);
+ if(name=="utf16le") return new Utf16(em, Utf16::LITTLE);
if(name=="windows1252" || name=="cp1252") return new Windows1252(em);
- throw invalid_argument("unknown string codec");
+ throw invalid_argument("StringCodec::create_codec");
}
Codec *detect_codec(const string &str)
bool is_latin1 = true;
unsigned utf8_mb = 0;
- for(string::const_iterator i=str.begin(); i!=str.end(); ++i)
+ for(char c: str)
{
- unsigned char c = *i;
if(c&0x80)
{
is_ascii = false;