【发布时间】:2012-09-29 11:37:02
【问题描述】:
我需要这样做:
- 有某种类型的变量。
- 循环运行并将所有可能的 ASCII 字符分配给该变量并逐一打印。
UNICODE 也有类似的可能吗?
【问题讨论】:
-
有将近 100,000 个Unicode 3.2 字符。您可能不想全部打印出来。
标签: javascript unicode ascii
我需要这样做:
UNICODE 也有类似的可能吗?
【问题讨论】:
标签: javascript unicode ascii
我不确定你到底想怎么打印,但这会console.log printable ascii
for(var i=32;i<127;++i) console.log(String.fromCharCode(i));
如果这是你的意图,你可以document.write。如果环境是 unicode,我相信它也应该适用于 unicode。
【讨论】:
有些 ASCII 字符是不可打印的,但例如从 32(空格)到 126(~),您可以使用:
var s = '';
for (var i = 32; i <= 127; i++) s += String.fromCharCode(i);
unicode 字符集有超过 110,000 个不同的字符(请参阅Unicode),但普通字体并不包含所有这些字符,因此无论如何您都无法显示它们。您必须指定您感兴趣的字符空间的哪些部分。
【讨论】:
Array.from(Array(127).keys()).slice(32).map(a => String.fromCharCode(a)) 在一个表达式中获取所有数组。使用 zeroTo 函数,它会变得更短,zeroTo(127).slice(32).map(a => String.fromCharCode(a))
其他人已经展示了如何打印可打印的 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 字符范围,可以查看我最近编写的 Full Unicode Input 实用程序。它的源代码说明了在 JavaScript 中处理 Unicode 字符的一些方法。
【讨论】: