2012-06-05 37 views
5

我在我们的问题跟踪器中找到了一张客户,其中一位客户报告了一个文本不完整的错误! 我们有一个从旧系统(IBM AS400)到现代系统的文本转换程序。 我追踪到它并在我的代码中发现未知行为!String.Trim()删除多于需要?

首先看到这一点: bug-full state

正如你看到的,有两个char前第一空间(的char32),但是当我删除Trim(),结果是:

bug-free state

是, Trim()从开始删除char160!发生什么事Trim()作品比需要更多? 备注:两张照片都是在相同的测试状态下拍摄的。

+0

是char 160未在使用的编码的空间?或者您正在使用错误的代码页? – Vlad

+0

这是我知道的一个正确的人物。 –

+0

这意味着你的代码页是错误的,因为在cp1256这个字符是一个空格。 – Vlad

回答

15

160是NBSP(Non-breaking space),根据文档,Trim将删除所有的空白。 160在Unicode中被分类为空白。

您可能想改为拨打Trim(' ')

4

Trim()删除前导和尾随的空格字符,这是exoctly what it is supposed to do

char 160是一个非破坏性的空间,它是它消除的空白字符之一。

2

修剪删除所有的空白,而不仅仅是空格。如果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