As noted on http://msdn.microsoft.com/en-us/library/system.text.unicodeencoding.aspx:
To enable error detection and to make the class instance more secure, the application should use the UnicodeEncoding constructor that takes a throwOnInvalidBytes parameter, and set that parameter to true. With error detection, a method that detects an invalid sequence of characters or bytes throws a ArgumentException. Without error detection, no exception is thrown, and the invalid sequence is generally ignored.
This constructor uses the Encoding.UTF8 property, which does NOT enable error detection. To enable error detection, an application should instead use an explicit instance of the UTF8Encoding class. For example:
StreamReader reader = newStreamReader(path, newUTF8Encoding(true, true), detectEncodingFromByteOrderMarks);