「ファイルにはUTF-8が付属していると仮定します」とあなたは言いました。
その場合、ファイルを C# 文字列または文字列の配列に読み取ることができると仮定します。
たとえば、byte[]
配列がある場合、次のように C# UTF16 文字列に変換できます。
var text = Encoding.UTF8.GetString(utf8Bytes);
または、(UTF8 エンコーディングを使用して) ファイルから C# 文字列に直接読み取ることもできます。自分でそのビットを実行できると仮定しましょう。
ここで、C# 文字列がある場合Encoding.GetEncoding()
、コード ページ パラメーターと aEncoderExceptionFallback
および aDecoderExceptionFallback
を使用して、文字列がその特定のコード ページで有効かどうかを確認できます。次のようにします。
public static bool IsStringValidForCodePage(string text, int codePage)
{
var encoder = Encoding.GetEncoding(codePage, new EncoderExceptionFallback(), new DecoderExceptionFallback());
try
{
encoder.GetBytes(text);
}
catch (EncoderFallbackException)
{
return false;
}
return true;
}
次の例では、コード ページ 1253 (ギリシャ語) で有効で、コード ページ 1252 (Latin 1) では無効なギリシャ語の Pi 文字 "π" を使用しています。
string pi = "π"; // Mmmm. I like pi.
if (IsStringValidForCodePage(pi, 1252))
Console.WriteLine("Pi is ok in 1252");
else
Console.WriteLine("Pi is NOT ok in 1252"); // Prints NOT ok.
if (IsStringValidForCodePage(pi, 1253))
Console.WriteLine("Pi is ok in 1253"); // Prints ok.
else
Console.WriteLine("Pi is NOT ok in 1253");