I think in terms of the non-printable aspect - I'm not sure that these characters are non-printable - I think they would print fine? However they were created, what you have now is a number of valid UTF-8 characters instead of the original characters.
To find the extent of the problem I'd suggest using a Customised Facet->Unicode char-code facet
This will give you a facet where you can narrow to rows which contain characters in a particular range.
In terms of solving the problem it's a difficult one to resolve. You can try using an approach like the one I've already suggested, or you could identify specific character combinations that have been caused and fix them using more specific "replace" expressions - e.g.
value.replace("“","\"").replace("�","\"")
If the only problems are the smart quotes you might only need 2 replace statements (or 4 if there were single and double smart quotes in the original). But if the problems are more varied in nature then using a broad brush approach such as character ranges maybe the way to go
Owen