Guid.Parse失败,有效的Guid - 编码问题?

时间:2014-12-10 11:45:48

标签: c# .net

所以,我有一个有效的GUID字符串

Guid.Parse("e6f85ae0-f479-4e98-9287-98f7e62ba083") // Parses just fine

这解析为.NET4.0 / 4.5中的GUID

然而这段代码

// Copy paste this line in VS Immediate window. Does not parse!!
Guid.Parse("e6f85ae0‐f479‐4e98‐9287‐98f7e62ba083") 

不解析。 Guid字符串是相同的,或者我认为。尝试一下,在Visual Studio的即时窗口中,第一个不解析,但第二个会解析!

您也可以使用此代码进行验证

var string1 = "e6f85ae0-f479-4e98-9287-98f7e62ba083";
var string2 = "e6f85ae0‐f479‐4e98‐9287‐98f7e62ba083";
bool isSame = string1.Equals(string2); // Equals false!! :/

这可能是编码问题吗?有没有办法检测到这个问题并正确解析GUID?

2 个答案:

答案 0 :(得分:2)

我有一半确信这是一个拖钓问题,但如果这是一个诚实的问题:

这些字符串不相同。第二个使用所谓的'narrow hyphen'('\u2010'),这是一个与常规连字符('\u002D')完全不同的字符,因此它没有被正确解析。

答案 1 :(得分:1)

由于使用了不同的连字符,因为decPL已经说过字符串不相同,所以Guid.Parse肯定会失败。要检测GUID是否为计算机可读,您可以使用Guid.TryParse方法。

bool isValidGUID = Guid.TryParse(string2, null);

并且没有任何称为人类可读的内容如果您要替换“narrow hyphen”,那么如果它包含其他符号,您的代码将会失败。 我没有使用变通方法,而是建议你调试获得'narrow hyphen'的原因

GUID还支持各种格式。如果要验证指定的格式,则可以使用Guid.TryParseExact方法。