为什么“K”.Length给我错误的结果?

问题描述:

我看到这个奇怪的问题,并不能找到类似网络上的这个任何地方任何东西:为什么“K”.Length给我错误的结果?

int l = "K".Length; //This actually returns 2 !!! The 'Autos' window in 
         //the debugger also shows "K".Length as 2. 

string s = "K"; 
l = s.Length;   //Whereas this returns 1 as expected 

我在不同的C#项目尝试这样做,甚至要求另一家开发商确认行为是相同的不同的机器上的不同项目。

我试图在VB.NET是一样的:

Dim l As Integer = "K".Length 'This returns 1 correctly 

难道我失去了吗?

+0

调试器的quickwatch的“K”.Length显示为1. – AgentFire 2013-03-20 11:37:10

+0

调试器的直接的“ K“.Length”显示为1. – AgentFire 2013-03-20 11:38:12

+0

第一个例子中K之前的空格不是吗? :) – koss 2013-03-20 11:39:37

这是因为“K”与“K”不同,在其中有一个不可见的字符,即ascii值为30(记录分隔符)。

您可以通过执行

byte[] bytes = Encoding.ASCII.GetBytes("K"); 
+0

FAster比我呵呵。 – AgentFire 2013-03-20 11:41:25

+0

现在的问题是,这个神奇的“K”是怎么出现的? – 2013-03-20 11:43:11

+1

我认为区别在于谁拷贝了代码示例,以及谁自己输入了代码示例...... – 2013-03-20 11:44:42

你的 “K” 实际上包含两个字符验证这一点。一个“K”和另一个unicode隐形符号。当我清楚地键入"-K-"时,它显示1,当我复制粘贴你的代码时,它是2.粘贴两次,它将是4.