【问题标题】:Removing unsupported unicode characters otherwise shown as squares删除不支持的 unicode 字符,否则显示为正方形
【发布时间】:2012-05-19 14:16:49
【问题描述】:

我正在使用一些 javascript,它们会在文档的某处插入一个随机杂项 unicode 符号。 (like these symbols)

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

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

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

多次调用它会给我:“ਖ਼੕ੁ੡਴਱ੜਯ੉”

干杯!

【问题讨论】:

    标签: javascript unicode special-characters


    【解决方案1】:

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

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

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

    【讨论】:

    • 我明白了。那么当字体没有某个charcode的字形时,浏览器会用它代替੡,但底层charcode保持不变?换句话说,您无法检测到该੡是否写在文档中。
    • 是的。在你的情况下,我看到一个带有0A61 的小盒子,它甚至不是一个字符。
    【解决方案2】:

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

    这可以改进,但作为一个周日的黑客,它是相当令人满意的。你可以在 GitHub 上查看the code

    【讨论】:

      猜你喜欢
      • 2017-12-13
      • 2013-09-25
      • 2011-08-15
      • 2019-01-13
      • 2021-05-20
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      • 1970-01-01
      相关资源
      最近更新 更多