I tried the script below, and made this example work.
The intention is to run a GET on this item, and copy the Description into Result.
[This is absolutely NOT the way to write a script more generally, and interrogating a tenant via API is absolutely the last resort, not the first resort, but anyway...]
At line 5 you can see the charset is specified in the Accept header.
The result is what we want...

If you don't include the charset in the Accept, you get a string encoded into whatever charset the server thinks you deserve, and when this it written to a field expecting utf8, you get a mess...

I suspect this is what you are seeing.
Try including the charset in the Accept...
var req = new XMLHttpRequest();
req.open("GET", tenantUrl + '/api/v3/workspaces/'+item.master.workspaceID+'/items/'+item.master.dmsID , false);
prepareRequest(req);
req.setRequestHeader('Accept', 'application/json;charset=UTF-8');
req.send();
var jsonObj = JSON.parse( req.responseText );
for (var i in jsonObj.sections) {
var section = jsonObj.sections[i];
for (var j in section.fields) {
var field = section.fields[j];
if (field.title == 'Description') {
item.RESULT = field.value+' at '+new Date();
}
}
}
...