【发布时间】:2016-07-19 17:11:51
【问题描述】:
使用 javascript,我想检查某个字符是否为 32 位?我该怎么做 ?我曾尝试使用charCodeAt(),但它不适用于 32 位字符。
任何建议/帮助将不胜感激。
【问题讨论】:
-
请定义一个示例“32位字符”。
标签: javascript unicode
使用 javascript,我想检查某个字符是否为 32 位?我该怎么做 ?我曾尝试使用charCodeAt(),但它不适用于 32 位字符。
任何建议/帮助将不胜感激。
【问题讨论】:
标签: javascript unicode
charCodeAt()docs 返回 0 到 65535 (FFFF) 之间的整数,表示 UTF-16 代码单元。
如果您想要整个代码点值,请使用codePointAt()。
您可以使用string.codePointAt(pos) 轻松检查字符是否由 1 或 2 个代码点值表示。
大于 FFFF 的值意味着它们占用 2 个代码单元,总共 32 位。
function is32Bit(c) {
return c.codePointAt(0) > 0xFFFF;
}
alert(is32Bit("?")); // true
alert(is32Bit("a")); // false
alert(is32Bit("₩")); // false
注意: codePointAt() 在 ECMAScript 6 中提供,因此这可能不适用于所有浏览器。如需 ECMAScript 6 支持,请查看 firefox 和 chrome。
【讨论】:
function characterInfo(ch) {
function is32Bit(ch) {
return ch.codePointAt(0) > 0xFFFF;
}
let result = `character: ${ch}\n` +
`CPx0: ${ch.codePointAt(0)}\n`;
if(ch.codePointAt(1)) {
result += `CPx1: ${ch.codePointAt(1)}\n`;
}
console.log( result += is32Bit(ch) ?
'Is 32 bit character.' :
'Is 16 bit character.');
}
//For testing
let ch16 = String.fromCodePoint(10020);
let ch32 = String.fromCodePoint(134071);
characterInfo(ch16);
characterInfo(ch32);
【讨论】: