// Example program
#include <iostream>
#include <string>
std::string ConvertCp874ToUtf8(const std::string& str_cp874) {
std::string utf8;
utf8.resize(str_cp874.length() * 3, ' ');
size_t i, j;
for (i = 0, j = 0; i < str_cp874.length(); i++)
{
//guard
if (str_cp874.length() - i >= 2)
if ((str_cp874[i] == 0xE0) &&
(str_cp874[i + 1] == 0xB8 ||
str_cp874[i + 1] == 0xB9)) {
return std::string(); // already converted.
}
if (str_cp874[i] < 0xA1) //english
{
utf8[j++] = str_cp874[i];
}
else if (str_cp874[i] < 0xE0) //thai 1
{
utf8[j++] = 0xE0;
utf8[j++] = 0xB8;
utf8[j++] = str_cp874[i] - 0xA0 + 0x80;
}
else //thai 2
{
utf8[j++] = 0xE0;
utf8[j++] = 0xB9;
utf8[j++] = str_cp874[i] - 0xE0 + 0x80;
}
}
utf8.resize(j);
return utf8;
}
int main()
{
std::string name = "\xa1";
auto utf8name = ConvertCp874ToUtf8(name);
for( int i = 0 ;i< 3 ; i++){
printf("%02x " , utf8name[i] );
}
}
Ly8gRXhhbXBsZSBwcm9ncmFtCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KCnN0ZDo6c3RyaW5nIENvbnZlcnRDcDg3NFRvVXRmOChjb25zdCBzdGQ6OnN0cmluZyYgc3RyX2NwODc0KSB7CiAgc3RkOjpzdHJpbmcgdXRmODsKICB1dGY4LnJlc2l6ZShzdHJfY3A4NzQubGVuZ3RoKCkgKiAzLCAnICcpOwogIHNpemVfdCBpLCBqOwogIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgc3RyX2NwODc0Lmxlbmd0aCgpOyBpKyspCiAgICAgIHsKICAgIC8vZ3VhcmQKICAgIGlmIChzdHJfY3A4NzQubGVuZ3RoKCkgLSBpID49IDIpCiAgICAgIGlmICgoc3RyX2NwODc0W2ldID09IDB4RTApICYmCiAgICAgICAgICAoc3RyX2NwODc0W2kgKyAxXSA9PSAweEI4IHx8CiAgICAgICAgICAgICAgc3RyX2NwODc0W2kgKyAxXSA9PSAweEI5KSkgewogICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOyAgLy8gYWxyZWFkeSBjb252ZXJ0ZWQuCiAgICAgIH0KCiAgICBpZiAoc3RyX2NwODc0W2ldIDwgMHhBMSkgIC8vZW5nbGlzaAogICAgICAgIHsKICAgICAgdXRmOFtqKytdID0gc3RyX2NwODc0W2ldOwogICAgfQogICAgZWxzZSBpZiAoc3RyX2NwODc0W2ldIDwgMHhFMCkgIC8vdGhhaSAxCiAgICAgICAgewogICAgICB1dGY4W2orK10gPSAweEUwOwogICAgICB1dGY4W2orK10gPSAweEI4OwogICAgICB1dGY4W2orK10gPSBzdHJfY3A4NzRbaV0gLSAweEEwICsgMHg4MDsKICAgIH0KICAgIGVsc2UgIC8vdGhhaSAyCiAgICB7CiAgICAgIHV0ZjhbaisrXSA9IDB4RTA7CiAgICAgIHV0ZjhbaisrXSA9IDB4Qjk7CiAgICAgIHV0ZjhbaisrXSA9IHN0cl9jcDg3NFtpXSAtIDB4RTAgKyAweDgwOwogICAgfQogIH0KICB1dGY4LnJlc2l6ZShqKTsKICByZXR1cm4gdXRmODsKfQppbnQgbWFpbigpCnsKICAgIHN0ZDo6c3RyaW5nIG5hbWUgPSAiXHhhMSI7CiAgICBhdXRvIHV0ZjhuYW1lID0gQ29udmVydENwODc0VG9VdGY4KG5hbWUpOwogICAgZm9yKCBpbnQgaSA9IDAgO2k8IDMgOyBpKyspewogICAgCXByaW50ZigiJTAyeCAiICwgdXRmOG5hbWVbaV0gKTsKICAgIAkKICAgIH0KfQo=