0

我正在编写一个包含 2,000 行的 DataGridView 的 C#/WinForms 应用程序。我的用户将在这些行中输入字符串。字符串可以是任何语言,但最可能的两种语言是英语和阿拉伯语。我对字符串中的最大字符数本身没有明确的限制,但我所拥有的是在将每个字符串写入磁盘时存储每个字符串的 2048 个字节的限制。如果生成的字节数组小于 2048 字节,我需要用空字符填充它。我假设 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 回答