【问题标题】:Printing all ASCII characters in Javascript在 Javascript 中打印所有 ASCII 字符
【发布时间】:2012-09-29 11:37:02
【问题描述】:

我需要这样做:

  1. 有某种类型的变量。
  2. 循环运行并将所有可能的 ASCII 字符分配给该变量并逐一打印。

UNICODE 也有类似的可能吗?

【问题讨论】:

  • 有将近 100,000 个Unicode 3.2 字符。您可能不想全部打印出来。

标签: javascript unicode ascii


【解决方案1】:

我不确定你到底想怎么打印,但这会console.log printable ascii

for(var i=32;i<127;++i) console.log(String.fromCharCode(i));

如果这是你的意图,你可以document.write。如果环境是 unicode,我相信它也应该适用于 unicode。

【讨论】:

  • 扩展 ascii 怎么样?
  • 它基本上适用于解释器使用的任何编码。不过,您可能需要在 for 循环中更改范围;-)
【解决方案2】:

有些 ASCII 字符是不可打印的,但例如从 32(空格)到 126(~),您可以使用:

var s = '';
for (var i = 32; i <= 127; i++) s += String.fromCharCode(i);

unicode 字符集有超过 110,000 个不同的字符(请参阅Unicode),但普通字体并不包含所有这些字符,因此无论如何您都无法显示它们。您必须指定您感兴趣的字符空间的哪些部分。

【讨论】:

  • 没有字体包含所有 Unicode 字符(即使字体技术目前也阻止了这种情况)。另一方面,渲染引擎可能使用不同的字体——例如,网络浏览器通常使用一些备用字体。
  • Array.from(Array(127).keys()).slice(32).map(a =&gt; String.fromCharCode(a)) 在一个表达式中获取所有数组。使用 zeroTo 函数,它会变得更短,zeroTo(127).slice(32).map(a =&gt; String.fromCharCode(a))
【解决方案3】:

其他人已经展示了如何打印可打印的 Ascii 字符。也可以打印所有其他 Ascii 字符,尽管它们是具有系统相关效果的控制字符(通常没有效果)。要将包含所有 Ascii 字符的字符串创建为字符串,您可以这样做:

var s = '';
for (var i = 0; i <= 127; i++) s += String.fromCharCode(i);

Unicode 要复杂得多,因为从 0 到 0x10FFFF 的 Unicode 编码空间包含大量未分配的代码点以及指定为非字符的代码点。还有私人使用代码点,可用于通过“私人协议”来表示字符,但没有普遍指定的含义。此外,许多 Unicode 字符是无间距的,即与前面的字符组合(例如,将“a”变为“â”),因此您无法在视觉上连续打印它们。 JavaScript 中没有简单的方法可以从整数中确定相应代码点的类 - 您可能需要读取 UnicodeData.txt 文件,对其进行解析,然后使用其中的信息对代码点进行分类。

最后还有一个编程问题,就是 JavaScript 的字符概念对应一个 16 位的代码单元(不是代码点),而任何大于 0xFFFF 的 Unicode 代码点都需要用两个代码单元来表示(所谓代理)。如果您在 HTML 文档的上下文中使用 JavaScript,并且想要打印 HTML 内容中的字符,那么最简单的方法是使用像 &amp;#x10400; 这样的字符引用(它表示代码点 10400 十六进制的 Unicode 字符)并将字符串分配给元素的innerHTML 属性。

如果您需要编写 Unicode 字符范围,可以查看我最近编写的 Full Unicode Input 实用程序。它的源代码说明了在 JavaScript 中处理 Unicode 字符的一些方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 2021-05-21
    • 2017-08-26
    • 2013-11-19
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多