所以,我有一个有效的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?
答案 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方法。