空字符串的长度为1

时间:2018-02-12 17:11:08

标签: c# unicode character-encoding

我有一系列名称与_ ex:string[] samples = ["Test_test","Test2_blah", "Test3_"]连接在一起。

在我的代码中的某个时刻,我想尝试在_之后验证值是否为空或空,如果是,请将其从数组中删除,如下所示:< / p>

string[] splitSample= samples[2].Split(new char[] { '_' }, 2);

if(!string.IsNullOrWhiteSpace(splitSample[1]))

我遇到的问题是splitSample[1]"",当我检查字符串的长度时,它是1,而不是0但是在Visual Studio 2017中它显示空引号。有没有办法真正看到隐形或实际发生的价值?

编辑: 当我检查数组值enter image description here

时,这是即时窗口的图片

1 个答案:

答案 0 :(得分:3)

根据呈现的方式,某些Unicode字符在表示时可以是不可见的(即static void Main(string[] args) { string invisibleChar = "\u200C"; string[] samples = { "Test_test", "Test2_blah", "Test3_" + invisibleChar }; string[] splitSample = samples[2].Split(new char[] { '_' }, 2); // Prints "Test3_" (or "Test3_?" if you use Console.Write). Debug.Print(samples[2]); Debug.Print(splitSample.Length.ToString()); // 2 if (!string.IsNullOrWhiteSpace(splitSample[1])) { Debug.Print(splitSample[1].Length.ToString()); // 1 // Prints "" (or "?" in Console). Debug.Print(splitSample[1]); var hex = string.Join("", splitSample[1].Select(c => ((int)c).ToString("X2"))); // Prints "200C" Debug.Print(hex); } Console.ReadLine(); } (例如"\u200C""\u2063"和检查this answer了解更多信息。

现在,你的字符串有一个长度(> 0),你想知道它实际代表什么。有很多方法可以实现这一点,其中之一是将您的字符串转换为十六进制。以下是使用上述Unicode字符的示例:

!string.IsNullOrWhiteSpace

请注意,由于您使用的是set servname [lindex $argv 1] set osusername [lindex $argv 2] ,因此可能会遗漏其他Unicode字符(例如"\u00A0"),因为它们被视为空格。所以,你应该问自己是否也要检查这些。

希望有所帮助。