I would suggest that you clean up the file as a completely separate step from parsing it as XML.
UTF-8 is a fairly easy encoding to understand; this web page shows how UTF-8 is meant to be formed. I suggest you write a program which reads in your input file and writes out a new file. It will read byte by byte, only writing out a character when it sees that it has been validly formed. When it sees an invalid byte, it would write out the string "UTF8ERROR" or some other easily-findable token which wouldn't occur naturally in the input data. It would then skip the rest of the character.
Afterwards, you can check where the errors have occurred and fix up the data... then parse it as normal.
This way you'll see how widespread the errors are, see if there's any pattern to them, and potentially be able to correct them. If you're going to receive more data from the same source, I'd strongly encourage you to tell them about the issue... it may indicate a more serious problem on their side.