如何识别零宽度字符?

时间:2015-09-03 09:08:52

标签: c# visual-studio-2015

Visual Studio 2015在我的代码中发现了一个意外的字符(错误CS1056

如何识别角色是什么?这是一个零宽度字符,所以我看不到它。我想确切地知道它是什么,所以我可以找出它来自哪里以及如何通过查找和替换来修复它(我有很多类似的错误)。

这是一个例子。在下面的引文中,x和y之间有一个零宽度字符:

  

X Y

在我的例子中告诉我角色的名字会很有帮助,但我也想知道如何自己识别角色。

4 个答案:

答案 0 :(得分:5)

我有一点Javascript embedded within my explanation of Unicode,它允许您查看复制/粘贴到文本框中的Unicode字符。您的示例如下所示:

Unicode explorer

在这里你可以看到角色是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?

http://www.fileformat.info/info/unicode/char/200b/index.htm

答案 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被称为"零宽度空间"。