bmt*_*033 0 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
}
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,因为UTF-8是一个可变长度编码,给定字符串中的最大字符数将取决于构成字符串语言的字符的代码点范围?如果这是正确的,我是否真的需要为每个按键操作执行类似上面的代码,以确定字符串何时超出最大存储大小?
不,您可以使用以下代码:
var encoding=Encoding.UTF8;
var requiredBytes=encoding.GetByteCount("hello world!");
Run Code Online (Sandbox Code Playgroud)
或者,您可以将字符串长度限制为
2048 / encoding.GetMaxByteCount(1)
Run Code Online (Sandbox Code Playgroud)
这将保证您的编码的所有字符串适合缓冲区.不幸的是,这只是UTF8的341个字符.