删除不受支持的 unicode 字符,否则显示为正方形

Removing unsupported unicode characters otherwise shown as squares

本文关键字:显示 正方形 字符 支持 unicode 删除      更新时间:2023-09-26

我正在搞砸一些javascript,它会在文档中的某个地方插入一个随机的杂项Unicode符号。(像这些符号(

但是,我想确保我只插入生成的字符,如果该字符不打印为那些"੟"方块之一。

到目前为止,我正在生成 2600 到 2699 之间的随机数。但我想确保它们是有效的,而不是正方形。没关系,我不是在生成十六进制代码,只是在生成整数,我缺少哪些符号并不重要。

String.fromCharCode(2600+(Math.floor(Math.random()*70)));

多次称呼会给我:"ਖ਼੕ੁ੡਴਱ੜਯ੉">

干杯!

有两个基本的东西可能会显示为这样的正方形(或菱形中的问号,或完全不同的东西,例如正方形中的码位值(:

  1. 由 U+FFFD 替换字符替换以显示的非法字符
  2. 所选字体中没有字形的字符(或其他可能被替换的字符(。

对于第一种情况,您可以尝试抛出无效的代码点(非字符(,但对于第二种情况,您几乎没有选择,因为这完全取决于字体、浏览器、其他安装的字体、用于呈现文本的技术等。

仅仅因为今天是星期天,我就破解了一个小 JS,用于测试在画布上绘制时的代码点是否看起来像0xFFFF字符。这只是一个比较像素的问题。因此,如果您的字体(在示例代码中,我使用任何默认系统字体(没有代码点,那么它(希望(就像0xFFFF一样绘制。

这可以改进,但作为周日黑客,它非常令人满意。您可以在 GitHub 上查看代码。