6

我需要做这样的事情:

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

UNICODE 也有类似的可能吗?

4

3 回答 3

14

我不确定您要打印的确切程度,但这将是console.log可打印的 ascii

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

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

于 2012-10-09T07:32:12.127 回答
0

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

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

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

于 2012-10-09T07:35:36.000 回答
0

其他人已经展示了如何打印可打印的 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 内容中的字符,那么最简单的方法是使用字符引用(如&#x10400;(表示代码点10400十六进制的 Unicode 字符))并将字符串分配给innerHTML元素的属性。

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

于 2012-10-09T08:49:30.877 回答