为什么“K".长度给我错误的结果

本文关键字:错误 结果 quot 为什么 | 更新日期: 2023-09-27 18:04:45

我看到了这个奇怪的问题,在网上找不到任何类似的东西:

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中尝试了相同的。净:

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

我正在失去它吗?

为什么“K".长度给我错误的结果

这是因为"K"不像"K",它有一个不可见字符,即一个ascii值30(记录分隔符)。

可以通过

来验证。
byte[] bytes = Encoding.ASCII.GetBytes("K");

你的"K"实际上包含两个字符。一个"K"和另一个unicode不可见符号。当我清楚地输入"-K-"时,它显示1,当我复制粘贴你的代码时,它显示2。粘贴两次,长度为4。