【发布时间】:2021-11-21 08:15:43
【问题描述】:
希望有人能帮我解决这个问题,因为到目前为止我还没有在网上找到任何解决方案。
我正在处理带有特殊字符的字符串,我想检测字符串中的任何字符是否无法通过例如网络浏览器甚至 Visual Studio 本身正确显示。以下字符串显示了此类字符。这来自 VS2019 中的 Text vizualizer:
TargetsforReduceCO
我检查了类似的问题,但答案大多仅限于检查字符代码是否超过 255。但是,仍然可以显示很多字符,例如希腊和西里尔符号。
我还找到了this 网站,该网站概述了所有 Unicode 字符并显示了它们在浏览器中的显示方式,但似乎没有任何逻辑无法显示字符及其字符代码.
我可以想象VS不知道哪些字符不能在各种浏览器中显示,但我希望至少有一种方法可以检查VS是否可以显示它们。
提前感谢您的帮助!
编辑:
我现在正在使用
input.Any(c => !char.IsLetterOrDigit(c) && c > 255);
因为输入通常不应包含除了您通常在文本中可以找到的符号之外的其他符号,但我确信它会在实际可以由 VS 或网络浏览器显示的符号上触发。
【问题讨论】:
-
您提到的问题不相关 - 255 是单字节代码页的限制,而不是 Unicode 或 UTF8。您确定您没有使用错误的代码页读取这些字符吗?那根弦是从哪里来的?看起来整个单词都在那个字符串中丢失了。
-
您必须非常清楚“无法显示”的含义。您显示的示例包含私人使用区域中的字符,但您是否还想计算操作系统中安装的任何字体都不支持的字符,或者宽度为 0 的字符(例如 RTL 标记,ZWJ) ? IMO,这些都是“不能显示”的合理定义。
-
无法显示我的意思是它们显示为带有问号的框/矩形。该字符串来自一些尝试将自定义设计的字体转换为字符串的开源软件。它并不总是有效,因为设计师非常有创意:)。在这些情况下,它会将其转换为奇怪的字符。
-
注:带数字的方框是一种显示字符,按字体处理。字体处理的字符看起来非常复杂(各种表格和整形器可能会将字符组合成一个字形。简而言之:如果您不愿意与显示引擎交谈(并且您知道安装的字体),这几乎是不可能的.但是,与其删除它,为什么会有这样的字符?也许你应该从那里开始
-
@GiacomoCatenazzi:我愿意做任何可能的事情,包括与显示引擎交谈,如果我知道的话:)。现在,删除这些字符超出了我的范围。我只是在处理别人给我的东西。我想警告他们,他们插入带有这些字符的字符串,以便他们可以删除它们。
标签: c# unicode visual-studio-2019