.Net предлагает возможность генерировать исключение, если преобразование кодировки завершается неудачно. Вам потребуется использовать класс EncoderExceptionFallback ( создает исключение EncoderFallbackException, если входной символ не может быть преобразован в закодированную последовательность выходных байтов ) для создания кодировки. Следующий код взят из документации для этого класса:
Encoding ae = Encoding.GetEncoding(
"us-ascii",
new EncoderExceptionFallback(),
new DecoderExceptionFallback());
затем используйте эту кодировку для выполнения преобразования:
// The input string consists of the Unicode characters LEFT POINTING
// DOUBLE ANGLE QUOTATION MARK (U+00AB), 'X' (U+0058), and RIGHT POINTING
// DOUBLE ANGLE QUOTATION MARK (U+00BB).
// The encoding can only encode characters in the US-ASCII range of U+0000
// through U+007F. Consequently, the characters bracketing the 'X' character
// cause an exception.
string inputString = "\u00abX\u00bb";
byte[] encodedBytes = new byte[ae.GetMaxByteCount(inputString.Length)];
int numberOfEncodedBytes = 0;
try
{
numberOfEncodedBytes = ae.GetBytes(inputString, 0, inputString.Length,
encodedBytes, 0);
}
catch (EncoderFallbackException e)
{
Console.WriteLine("bad conversion");
}
На этой странице MSDN "Кодировка символов в .NET Framework" в некоторой степени обсуждается обоснование поведения преобразования по умолчанию. Таким образом, они не хотели беспокоить устаревшие приложения, которые зависят от этого поведения. Тем не менее, они рекомендуют переопределить значение по умолчанию.