我需要计算一个子字符串将被转换为UTF8字节数组的大小(以字节为单位)。这需要发生,而实际上并没有对该子字符串进行转换。不幸的是,我正在使用的字符串非常大,我必须小心,不要在内存中创建另一个大字符串(或字节数组)。计算UTF8转换所需字节数的正确方法是什么?
Encoding.UTF8对象上有一个名为GetByteCount的方法,但我没有看到一个重载,它不需要将字符串复制到一个字节数组中。这不适用于我:
Encoding.UTF8.GetByteCount(stringToCount.ToCharArray(), startIndex, count);
因为stringToCount.ToCharArray()将创建我的字符串的副本。
这就是我现在所拥有的:
public static int CalculateTotalBytesForUTF8Conversion(string stringToCount, int startIndex, int endIndex)
{
var totalBytes = 0;
for (int i = startIndex ; i < endIndex; i++)
totalBytes += Encoding.UTF8.GetByteCount(new char[] { stringToCount[i] });
return totalBytes;
}
的GetByteCount方法似乎并不不得不采取在短短的焦炭的能力,所以这是我在妥协。
这是确定一个字符串的字节数正确的方式,转换为UTF-8之后,实际上并没有这样做的转换?还是有更好的方法来做到这一点?
看看@ http://stackoverflow.com/questions/8511490/calculating-length-in-utf-8-of-java-string-without-actually-encoding-it(c#在char上有ishighsurrogate) – 2015-02-09 16:35:55