[Filesystem] Added decoding for UTF-8 4 bytes characters 99/110299/1
authorSzymon Jastrzebski <s.jastrzebsk@partner.samsung.com>
Fri, 13 Jan 2017 14:36:03 +0000 (15:36 +0100)
committerSzymon Jastrzebski <s.jastrzebsk@partner.samsung.com>
Fri, 13 Jan 2017 14:36:03 +0000 (15:36 +0100)
Change-Id: I78bfa0e205d62b7e7dc5a6b95cad8cf98a941ae1
Signed-off-by: Szymon Jastrzebski <s.jastrzebsk@partner.samsung.com>
src/filesystem/js/base64.js

index 20a29b49d9ca9ba301ff37a001b3ccfbbeba1765..034ce333eccdbf6592d323bfd120402d8a7559af 100755 (executable)
@@ -115,7 +115,7 @@ var Base64 = {
   },
   _utf8_decode: function(utfarray) {
     var str = '';
-    var i = 0, c = 0, c1 = 0, c2 = 0;
+    var i = 0, c = 0, c1 = 0, c2 = 0, c3 = 0;
 
     while (i < utfarray.length) {
 
@@ -130,13 +130,19 @@ var Base64 = {
         str += String.fromCharCode(((c & 31) << 6) | (c1 & 63));
         i += 2;
       }
-      else {
+      else if((c > 223) && (c < 240)) {
         c1 = utfarray[i + 1];
         c2 = utfarray[i + 2];
         str += String.fromCharCode(((c & 15) << 12) | ((c1 & 63) << 6) | (c2 & 63));
         i += 3;
       }
-
+      else {//support 4 bytes characters e.g. Emojis
+        c1 = utfarray[i + 1];
+        c2 = utfarray[i + 2];
+        c3 = utfarray[i + 3];
+        str += String.fromCodePoint(((c & 7) << 18) | ((c1 & 63) << 12) | ((c2 & 63) << 6) | (c3 & 63));
+        i += 4;
+      }
     }
 
     return str;