我在我们的问题跟踪器中找到了一张客户,其中一位客户报告了一个文本不完整的错误! 我们有一个从旧系统(IBM AS400)到现代系统的文本转换程序。 我追踪到它并在我的代码中发现未知行为!String.Trim()删除多于需要?
首先看到这一点:
正如你看到的,有两个char前第一空间(的char32),但是当我删除Trim()
,结果是:
是, Trim()
从开始删除char160!发生什么事Trim()
作品比需要更多? 备注:两张照片都是在相同的测试状态下拍摄的。
我在我们的问题跟踪器中找到了一张客户,其中一位客户报告了一个文本不完整的错误! 我们有一个从旧系统(IBM AS400)到现代系统的文本转换程序。 我追踪到它并在我的代码中发现未知行为!String.Trim()删除多于需要?
首先看到这一点:
正如你看到的,有两个char前第一空间(的char32),但是当我删除Trim()
,结果是:
是, Trim()
从开始删除char160!发生什么事Trim()
作品比需要更多? 备注:两张照片都是在相同的测试状态下拍摄的。
160是NBSP(Non-breaking space),根据文档,Trim
将删除所有的空白。 160在Unicode中被分类为空白。
您可能想改为拨打Trim(' ')
。
Trim()
删除前导和尾随的空格字符,这是exoctly what it is supposed to do。
char 160是一个非破坏性的空间,它是它消除的空白字符之一。
修剪删除所有的空白,而不仅仅是空格。如果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
是char 160未在使用的编码的空间?或者您正在使用错误的代码页? – Vlad
这是我知道的一个正确的人物。 –
这意味着你的代码页是错误的,因为在cp1256这个字符是一个空格。 – Vlad