.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 page, "Character Encoding in the .NET Framework"討論,在一定程度上,後面的默認轉換行爲的理由。總之,他們不想幹擾依賴於此行爲的傳統應用程序。不過,他們建議覆蓋默認值。
很好的解釋。我曾看到過這樣一句話:「您可能想考慮讓應用程序將EncoderFallback或DecoderFallback設置爲EncoderExceptionFallback或DecoderExceptionFallback,以防止設置了第8位的序列。」在文檔中,但對我來說這並不明顯,它可以用於嚴格的轉換。 – AndiDog 2010-10-04 22:12:09