X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/f94e2c9821eb8784ca03b7122485d4720ec6d6e6..e1ab7c11166f80197ef6d5ea33f10430718f5783:/lib/base/estring.cpp?ds=sidebyside diff --git a/lib/base/estring.cpp b/lib/base/estring.cpp index 10bfbef8..014f6e7d 100644 --- a/lib/base/estring.cpp +++ b/lib/base/estring.cpp @@ -334,19 +334,21 @@ std::string convertDVBUTF8(const unsigned char *data, int len, int table, int ts switch(data[0]) { - case 1 ... 12: + case 1 ... 11: table=data[i++]+4; -// eDebug("(1..12)text encoded in ISO-8859-%d",table); +// eDebug("(1..11)text encoded in ISO-8859-%d",table); break; case 0x10: { // eDebug("(0x10)text encoded in ISO-8859-%d",n); - int n=(data[++i]<<8)|(data[++i]); + int n=(data[++i]<<8); + n |= (data[++i]); ++i; switch(n) { case 12: eDebug("unsup. ISO8859-12 enc.", n); + break; default: table=n; break; @@ -369,9 +371,12 @@ std::string convertDVBUTF8(const unsigned char *data, int len, int table, int ts ++i; eDebug("unsup. Big5 subset of ISO/IEC 10646-1 enc."); break; + case 0x15: // UTF-8 encoding of ISO/IEC 10646-1 + return std::string((char*)data+1, len-1); case 0x0: - case 0xD ... 0xF: - case 0x15 ... 0x1F: + case 0xC ... 0xF: + case 0x16 ... 0x1F: + default: eDebug("reserved %d", data[0]); ++i; break; @@ -521,7 +526,7 @@ std::string convertLatin1UTF8(const std::string &string) while (i < len) { - unsigned long code=string[i++]; + unsigned long code=(unsigned char)string[i++]; // Unicode->UTF8 encoding if (code < 0x80) // identity latin <-> utf8 mapping res[t++]=char(code);