Please, take a look to the uploaded project (here summarized), compile it and read the two encoded textfiles (exUTF8.txt and exUnicode.txt). I followed what you have suggested (use Utf8ToAnsi function) but the result is wrong.
...
yes, they're wrong, because you've changed the code completely!
Originally, you've been building a word of different characters and then pushing the complete word (that keeps the whole UTF8 encoding).
In this project, you're forcefully breaking the utf8 encoded word into separate characters.
I've updated the project (pretty much returned to the original code you posted).
As you can see, UTF8 now loads fine. (I've also added BOM skipping to the code).
Unicode loading will require a different approach.
You will either need to read "WideChars" and build them into "WideString" (which is straight forward).
Or reading "char" by "char", build a buffer that turns into "WideString".