根据MS文档,这应该有效,但事实并非如此。
Char.IsSymbol('%')
https://msdn.microsoft.com/en-us/library/system.char.issymbol(v=vs.110).aspx
Char.GetUnicodeCategory('%') == OtherPunctuation
所以从IsSymbol
返回 true 。
答案 0 :(得分:5)
您使用的是百分比%
(U + 0025),而不是文档实际提到的字符℅
(U+2105, "care of"。原来它实际上是一个微小的,不可读的“ c / o“,as used on on letters):
Unicode标准中的符号是一组松散定义的字符,包括以下内容:
货币符号。
字母符号,包括一组数学字母数字符号以及℅,№和™等符号。
此符号分类为OtherSymbol
:
Char.GetUnicodeCategory('℅') == OtherSymbol
Char.IsSymbol('℅') == true
百分比字符只是一个普通的标点字符,而不是符号:
Char.GetUnicodeCategory('%') == OtherPunctuation
Char.IsPunctuation('%') == true
答案 1 :(得分:4)
如果百分比符号的类别为OtherPunctuation
,则它不在文档中所说的类别之一(MathSymbol,CurrencySymbol,ModifierSymbol和OtherSymbol)。
答案 2 :(得分:2)
是和否。 MSDN页面上显示的字符看起来像百分号,但它实际上是更高的unicode。
var z = '℅'; // 8453
var zz = '%'; // 37
var a = char.IsSymbol(z);
var aa = char.IsSymbol(zz);
答案 3 :(得分:1)
这不被视为符号。 例: Char.IsSymbol(' ^&#39)
返回true。
Char.IsSymbol('%&#39)
返回false。
它正在工作,而不是你希望它工作。您可能还需要定义自己的函数来检查您认为符号的字符。
答案 4 :(得分:1)
基于this qeustion,在此上下文中为符号的字符:来自UnicodeCategory.MathSymbol
命名空间的UnicodeCategory.CurrencySymbol
,UnicodeCategory.ModifierSymbol
,UnicodeCategory.OtherSymbol
和System.Globalization
。这些是分别指定为Sm,Sc,Sk和So的Unicode字符。所有其他字符都会返回False
。