0

2,000 行の DataGridView を含む C#/WinForms アプリケーションを作成しています。ユーザーはこれらの行に文字列を入力します。文字列はどの言語でもかまいませんが、最も可能性の高い 2 つの言語は英語とアラビア語です。文字列の最大文字数自体に明示的な制限はありませんが、ディスクに書き込まれるときに各文字列を保存するために 2048 バイトの制限があります。結果のバイト配列が 2048 バイト未満の場合は、null 文字を埋め込む必要があります。UTF-8 がおそらくこれらの文字列を格納するための最も効率的なエンコーディングになると思いますか? もしそうなら、文字列の保存を許可する前に、次のようにすることを考えていました。

byte[] stringAsBytes = System.Text.Encoding.UTF8.GetBytes(myString);
if (stringAsBytes.Length > 2048)
{
    // string is too long to be stored in 2048 bytes
}

私の理解が正しければ、UTF-8 は可変長エンコーディングであるため、特定の文字列の最大文字数は、文字列の言語を構成する文字のコード ポイント範囲に依存しますか? そうであれば、文字列がストレージの最大サイズをいつ超えたかを正確に判断するために、キーを押すたびに上記のコードのようなことをする必要がありますか?

4

1 に答える 1

5

いいえ、次のコードを使用できます。

var encoding=Encoding.UTF8;
var requiredBytes=encoding.GetByteCount("hello world!");

または、文字列の長さを制限することもできます

2048 / encoding.GetMaxByteCount(1)

これにより、エンコーディングのすべての文字列がバッファーに収まることが保証されます。残念ながら、UTF8 では 341 文字しかありません。

于 2013-01-27T22:51:07.317 に答える