神秘地在字符串中添加引号

时间:2012-10-15 04:11:28

标签: c# string

我使用文本编辑器将某个源代码复制并粘贴到我的程序中。我基本上需要确认源代码以“int main()”开头,所以我继续将行与“int main()”进行比较,但比较总是返回false。

我决定将字符串剥离成字符并发现一些奇怪的东西。

enter image description here

所以字符串行在其中传递“int main()”,这是在文本编辑器中粘贴的文本。你会认为a和b会有相同的字符,但它们不会:

enter image description here

老实说,我不确定开头的引号来自哪里。原始字符串不包含它,调试器不显示它(否则将显示“\”int main()\“”)。这里发生了什么?

编辑:我尝试过line = line.Trim()。这个角色还没有消失。显然它是零宽度不间断空间的一些特殊的unicode字符。如何从字符串中删除它?

4 个答案:

答案 0 :(得分:2)

65279看起来像是UTF-16 BOM(U + FEFF)的十进制表示,您将数据读入“line”的方式是否有可能无法将其删除?

答案 1 :(得分:1)

您可以将line设置为line.Trim();如果没有看到line的设置方式,很难说出可能会发生什么。

基于BOM字符更新:尝试line.Trim(new char[]{'\uFEFF'});假设.NET 4

答案 2 :(得分:0)

我找到了解决方案:

private readonly string BYTE_ORDER_MARK_UTF8 = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble());

...

if (line.StartsWith(BYTE_ORDER_MARK_UTF8))
                line = line.Remove(0, BYTE_ORDER_MARK_UTF8.Length);

那是古怪的......

答案 3 :(得分:-1)

在您发布的代码中,似乎line变量以空格字符开头。试试line = line.Trim();

修改

string.Trim()

可以找到(U+FEFF)方法未按预期工作的原因
  

从.NET Framework 4开始,该方法修剪所有Unicode空格字符(即,在传递给Char.IsWhiteSpace方法时产生真实返回值的字符)。由于此更改,.NET Framework 3.5 SP1和更早版本中的Trim方法删除了两个字符,ZERO WIDTH SPACE(U + 200B)和ZERO WIDTH NO-BREAK SPACE(U + FEFF),即Trim方法。 NET Framework 4及更高版本不会删除。

line似乎是Trim开头的角色,因此{{1}}没有处理它。