2013-03-20 13 views
9

私はこの奇妙な問題を見ていて、ウェブ上でこのどこかに似た何かを見つけることができません。なぜ "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

デバッガのクイックウォッチの "K" .Length'は1を表示します。 – AgentFire

+0

デバッガの即値の ' K ".Length'は1を示します。 – AgentFire

+0

最初の例ではKの前にスペースはありませんか? :) – koss

答えて

12

「K」は「K」とは異なり、非表示の文字、つまりASCII値30(レコードセパレータ)を持つためです。

は、あなたが実際に2つの文字が含まれてい

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

FAsterよりハァッ。 – AgentFire

+0

今、質問、この魔法の "K"はどのように現れましたか? –

+1

私は違いがコードサンプルを誰にコピーしたのか、誰がそれを自分自身でタイプしたのかと思います... –

6

あなたの "K" を行うことでこれを確認することができます。 1つの「K」と他のユニコードの不可視シンボル。私は明らかに"-K-"と入力するとコードがコピーされると1が表示され、コードは2になります。2回貼り付ければ4になります。

関連する問題