I have an ionic application that fetches data from a remote web server (json). The response is UTF-8 and has some French characters. The issue is that these French characters are not displayed correctly in the app.
i.e. Synthétique is shown as Synthétique.
the é in utf-8 has code C3A9 (two bytes) which matches à and © in iso-8859-1 which seems to imply that there enconding from UTF-8 to iso-8859-1.
What I am doing wrong here? or what do I need to do to get the French characters correctly displayed.
1 Like
Did you solve it in the end? Having similar problems getting data that has formatting and its lost.
Yes, I had to rely on a hack and do manual conversion on the client side. I was passing each incoming French string through the function below:
export class Hack {
public static fromUTF8String(intpuStr) {
let data = [];
for (let i = 0; i < intpuStr.length; ++i) {
data.push(intpuStr.charCodeAt(i));
}
var str = '',
i;
for (i = 0; i < data.length; i++) {
var value = data[i];
if (value < 0x80) {
str = str.concat(String.fromCharCode(value));
} else if (value > 0xBF && value < 0xE0) {
str = str.concat(String.fromCharCode((value & 0x1F) << 6 | data[i + 1] & 0x3F));
i += 1;
} else if (value > 0xDF && value < 0xF0) {
str = str.concat(String.fromCharCode((value & 0x0F) << 12 | (data[i + 1] & 0x3F) << 6 | data[i + 2] & 0x3F));
i += 2;
} else {
// surrogate pair
var charCode = ((value & 0x07) << 18 | (data[i + 1] & 0x3F) << 12 | (data[i + 2] & 0x3F) << 6 | data[i + 3] & 0x3F) - 0x010000;
str = str.concat(String.fromCharCode(charCode >> 10 | 0xD800, charCode & 0x03FF | 0xDC00));
i += 3;
}
}
return str;
}
}
This is not a solution I did come-up with but found it online long time ago, can’t find the original.
1 Like
Thanks! Must try that!
Thanks, this hack works for me!! You saved my day^^