确保UTF-8编码的字符串适合2048字节

时间:2013-01-27 22:43:19

标签: c# string unicode encoding utf-8

我正在编写一个C#/ WinForms应用程序,其中包含一个包含2,000行的DataGridView。我的用户会在这些行中输入字符串。字符串可以是任何语言,但最可能的两种语言是英语和阿拉伯语。我没有明确限制字符串中的最大字符数本身,但我所拥有的是每个字符串写入磁盘时存储的限制为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是可变长度编码,给定字符串中的最大字符数将取决于构成字符串语言的字符的代码点范围?如果这是正确的,我是否真的需要为每个按键操作执行类似上面的代码,以确定字符串何时超出最大存储大小?

1 个答案:

答案 0 :(得分:5)

不,您可以使用以下代码:

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

或者,您可以将字符串长度限制为

2048 / encoding.GetMaxByteCount(1)

可以保证编码的所有字符串都适合缓冲区。不幸的是,这只是UTF8的341个字符。