我检查了 AsciiEncoding 的 GetByteCount 方法。它执行长计算而不是返回 String.Length。这对我来说完全没有任何意义。你知道为什么吗?
最佳答案
编辑:我刚刚尝试重现此内容,目前无法强制使用 ASCIIEncoding 来进行不同的替换。相反,我必须使用 Encoding.GetEncoding 来获取可变的。因此,对于 ASCIIEncoding,我同意...但对于 IsSingleByte
返回 true 的其他实现,您仍然会遇到下面的潜在问题。
考虑尝试获取不只包含 ASCII 字符的字符串的字节数。编码必须考虑 EncoderFallback
...它可以执行任意数量的操作,包括以不确定的量增加计数。
它可以针对编码器后备是“默认”编码器仅用“?”替换非 ASCII 字符的情况进行优化。不过。
进一步编辑:我只是试图将其与代理对混淆,希望它由一个问号表示。不幸的是没有:
string text = "x\ud800\udc00y";
Console.WriteLine(text.Length); // Prints 4
Console.WriteLine(Encoding.ASCII.GetByteCount(text)); // Still prints 4!
关于c# - IsSingleByte Encoding的GetByteCount为什么要进行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5610431/