Visual Studio 2015在我的代码中发现了一个意外的字符(错误CS1056)
如何识别角色是什么?这是一个零宽度字符,所以我看不到它。我想确切地知道它是什么,所以我可以找出它来自哪里以及如何通过查找和替换来修复它(我有很多类似的错误)。
这是一个例子。在下面的引文中,x和y之间有一个零宽度字符:
X Y
在我的例子中告诉我角色的名字会很有帮助,但我也想知道如何自己识别角色。
答案 0 :(得分:5)
我有一点Javascript embedded within my explanation of Unicode,它允许您查看复制/粘贴到文本框中的Unicode字符。您的示例如下所示:
在这里你可以看到角色是U + 200B。只是搜索它通常会引导您http://www.fileformat.info,在这种情况下this page可以为您提供角色的详细信息。
如果您在应用程序中拥有自己的角色,Char.GetUnicodeCategory
就是您的朋友。 (奇怪的是,据我所知,非BMP角色没有Char.GetUnicodeCategory(int)
...)
答案 1 :(得分:3)
根据类似问题:Remove zero-width space characters from a JavaScript string
我按下ctrl + f(或ctrl + h)然后打开Regexp选项,然后搜索(或搜索替换):
[\u200B-\u200D\uFEFF]
我刚试过你的例子并成功用“X”标记替换了零宽度空间。
请注意,此范围仅涵盖该帖子中解释的几个特定字符,而非所有不可见字符。
编辑 - 感谢this page我找到了一个更好的表达式,当启用Regexp选项时,“查找/替换”中得到了很好的支持:
\p{Cf}
似乎匹配不可见的字符,它在你的例子中成功地击中了那个,虽然我不确定它是否涵盖你所需要的一切。可能值得玩整个{C}
- 类或搜索{Z}
- 类(或{Zs}
)否定的空格|非打印加负匹配。
答案 2 :(得分:0)
啊哈,请使用这个网站http://www.fileformat.info/info/unicode/char/search.htm?q=%E2%80%8B&preview=entity
您是否正在寻找Unicode字符U + 200B:ZERO WIDTH SPACE?
答案 3 :(得分:0)
您可以询问内置的Unicode表:
var category = char.GetUnicodeCategory(s[1]);
示例中的特定字符位于Format
类别中,此处为MSDN has to say about it:
影响文本布局或文本进程操作的格式字符,但通常不会呈现。由Unicode标识表示" Cf" (其他,格式)。值为15.
要获取字符代码,只需将其解压缩:
char c = s[1];
int codepoint = (int)c; // gives you 0x200B
unicode codepoint 0x200b被称为"零宽度空间"。