Char.IsSymbol('%')不起作用

时间:2018-01-17 17:28:11

标签: c#

根据MS文档,这应该有效,但事实并非如此。

Char.IsSymbol('%')

https://msdn.microsoft.com/en-us/library/system.char.issymbol(v=vs.110).aspx

Char.GetUnicodeCategory('%') == OtherPunctuation所以IsSymbol返回 true

5 个答案:

答案 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.CurrencySymbolUnicodeCategory.ModifierSymbolUnicodeCategory.OtherSymbolSystem.Globalization 。这些是分别指定为Sm,Sc,Sk和So的Unicode字符。所有其他字符都会返回False