2

国コードページに対応する有効な文字のみが含まれている場合、txt ファイルを確認するにはどうすればよいですか?

それらはLinuxシステムに転送されるため、すべての文字がコードページに含まれている必要があります

Googleで検索しても、役立つものは何も見つかりませんでした

これを確認する「クリーンな」方法はありますか、それとも「ダーティ」(静的) な方法しかありませんか?

更新:アプリケーションの翻訳を含むリソース ファイルをチェックしなければならない状況です。これらのファイルはさまざまな国で翻訳されているため、間違った文字を入力すると、後でアプリケーションが正しく表示できなくなる可能性があります。Windows は常にほぼ同じ文字を検索しますが、Linux は検索しません。それがポイントです。

4

2 に答える 2

2

「ファイルには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");
于 2013-06-17T15:26:15.087 に答える