我在我们的问题跟踪器中发现了一张票,其中一位客户报告了一个文本不完整的错误!我们有一个从旧系统(IBM AS400)到现代系统的文本转换程序。我跟踪它并在我的代码上发现了一个未知的行为!!
首先看到这个:
如您所见,第一个空格(char32)之前有两个字符,但是当我删除时Trim()
,结果是:
是的,Trim()
从一开始就删除 char160!发生了什么事Trim()
比需要更有效?
注意:两张图片都是在相同的测试状态下拍摄的。
160 是 NBSP(不间断空格),根据文档,Trim
将删除所有空格。160 在 Unicode 中被归类为空白。
您可能想改为打电话Trim(' ')
。
Trim()
删除前导和尾随空白字符,这正是它应该做的。
char 160 是一个不间断的空格,它是它消除的空白字符之一。
Trim 删除所有空格,而不仅仅是空格。如果 char 160 是代码页 1256 中的空格,Trim 将删除它。
以下代码显示 32 和 160 是代码页 1256 中的空白:
var chars = new byte[] {32,160,164 };
var enc=Encoding.GetEncoding(1256);
var str=enc.GetString(chars);
foreach (var character in str)
{
Console.WriteLine("{0}:{1}", character, Char.IsWhiteSpace(character));
}
Console.ReadKey();
回报:
True
True
False