我想将一个字符串放入一个字节数组,但字符串可能太大而不适合.在它太大的情况下,我想尽可能多地将字符串放入数组中.有没有一种有效的方法可以找出适合的字符数量?
为了将字符串截断为UTF8字节数组而不在字符中间分割,我使用:
static string Truncate(string s, int maxLength) { if (Encoding.UTF8.GetByteCount(s) <= maxLength) return s; var cs = s.ToCharArray(); int length = 0; int i = 0; while (i < cs.Length){ int charSize = 1; if (i < (cs.Length - 1) && char.IsSurrogate(cs[i])) charSize = 2; int byteSize = Encoding.UTF8.GetByteCount(cs, i, charSize); if ((byteSize + length) <= maxLength){ i = i + charSize; length += byteSize; } else break; } return s.Substring(0, i); }
然后可以将返回的字符串安全地传输到长度为maxLength的字节数组.