C# 为什么在转换从网页检索的数字时Decimal.TryParse返回false?

C# 为什么在转换从网页检索的数字时Decimal.TryParse返回false?,c#,decimal,html-agility-pack,C#,Decimal,Html Agility Pack,我正在使用HtmlAgilityPack从各种网站检索信息,如下所示fhfaRate=“3.62”处于调试状态,但isNum为false和myRate=0.0。 我在TryParse中键入“3.62”,效果很好,但如果我从fhfaRate(在调试中)复制值并粘贴到TryParse,则返回false,尽管看起来像这样-“3.62” 这就像是“3.62”“3.62”,我被难住了 doc = web.Load(fhfaUrl); string fhfaRate = doc.DocumentNode.S

我正在使用HtmlAgilityPack从各种网站检索信息,如下所示
fhfaRate=“3.62”
处于调试状态,但
isNum
false
myRate=0.0
。 我在
TryParse
中键入
“3.62”
,效果很好,但如果我从
fhfaRate
(在调试中)复制值并粘贴到
TryParse
,则返回
false
,尽管看起来像这样-
“3.62”

这就像是
“3.62”“3.62”
,我被难住了

doc = web.Load(fhfaUrl);
string fhfaRate = doc.DocumentNode.SelectSingleNode("//td[@class='tg-s6z2  ms-rteTableEvenCol-4']/p").InnerText;
decimal myRate;
bool isNum = Decimal.TryParse(fhfaRate, NumberStyles.Any, CultureInfo.InvariantCulture, out myRate);

感谢那些帮助过我的人。原来字符串的
CharArray
中追加了一个零宽度空格(8203)。我使用了一个子字符串作为前4个字符,瞧,我有一个十进制值

在我这样做之后,我开始思考——如果值变为2位,它就会断开,所以我环顾四周,发现了这个

InnerText.Replace((char)0x200B, ' ');

在该行上设置一个断点,当断点提示时,查看“监视”窗口中的
fhfaRate.tocharray()
。里面可能有一个看不见的角色。还要检查
System.Globalization.CultureInfo.CurrentCulture
的值。它真的只包含“3.62”的字符还是字符数组包含更多字符?或者尝试在调试
string.Join(“”,fhfaRate.Select(c=>((int)c).ToString(“x4”)
结果应该是
“0033002e 0036 0032”
(对于
“3.62”
)谢谢,谢谢,谢谢!其中隐藏了第五个字符,8203,零宽度空格。我使用子字符串捕捉前4个字符,但也许有更好的方法?@Doug,用你的最新发现更新问题,这样人们就可以在不阅读所有评论的情况下回答它;)如果没有人会回答,稍后你可以发布自己的答案。零空格字符真的很刻薄。trim函数还接受一个字符数组,因此您可以这样使用它:
InnerText.trim(新字符[]{'\x2009','\x200B'})