Lee_M's avatar
Community Hero
2 years ago
New Idea

aqFile encoding update

I save a file using JavaScript using
aqFile.WriteToTextFile(filename, File_entry, aqFile.ctUTF8);

The files save as expected but with an encoding issue

I have found the issue is that the file is saved as UTF-8 BOM and NOT UTF-8 as expected


Current fucntionality

Code function Saved encoding
aqFile.ctANSI UTF-8
aqFile.ctUnicode UTF-16 LE BOM
aqFile.ctUTF8 UTF-8 BOM


I would like this function to be updated to reflect the correct encodings

(possibly aqFile.cteANSI - new names as not to change any legacy functionality people have programmed in)

aqFile.ctANSI -> ANSI
aqFile.ctUnicode -> Unicode
aqFile.ctUTF8 -> UTF-8
aqFile.ctUTF8B -> UTF-8 BOM
aqFile.ctUTF16 -> UTF-16
aqFile.ctUTF16BB -> UTF-16 BE BOM
aqFile.ctUTF16LB -> UTF-16 LE BOM


to get around this issue I am currently saving in the incorrect format each (ANSI) to get my UT8 encoding.





TestComplete Support has provided an interim solution if anyone is interested


(each files take approximately 4 seconds to create
300 files now take 20 minutes, saving it in ANSI (incorrect format) takes less than 1 minute)


You can remove BOM using the following script.


function bomInUtf8Test()
 function getIsContainsBom(bytes)
  var utf8Bom = [0xEF, 0xBB, 0xBF];
  for (var i = 0; i < 3; i++)
   if (bytes[i] != utf8Bom[i])
    return false;
  return true;

 var fileName = "d:\\test.txt";
 aqFile.WriteToTextFile(fileName, "TEST", aqFile.ctUTF8, true);
 var file = aqFile.OpenBinaryFile(fileName, aqFile.faRead);
 var bytes = [];
 // Reads bytes from the file and posts them to the test log  
  if (bytes.length == 3 // UTF-8 BOM is 3 bytes long
   && !getIsContainsBom(bytes))
  { // No BOM found in the file, no changes required
 var file = aqFile.OpenBinaryFile(fileName, aqFile.faWrite, true);
 // Remove the three bytes of BOM
 bytes = bytes.slice(3);
 for (var i = 0; i < bytes.length; i++)

As an alternative solution, you can use Notepad++ which can convert UTF-8 files to UTF-8 without BOM.

No CommentsBe the first to comment