【发布时间】:2018-02-19 19:45:30
【问题描述】:
假设我们有一个包含一些(星形)Unicode 字符的字符串:
const s = 'Hi ???? Unicode!'
[] 运算符和.charAt() 方法不适用于获取第 4 个字符,应该是“????”:
> s[3]
'�'
> s.charAt(3)
'�'
.codePointAt() 确实获得了第 4 个字符的正确值,但不幸的是它是一个数字,必须使用 String.fromCodePoint() 转换回字符串:
> String.fromCodePoint(s.codePointAt(3))
'????'
同样,使用 splats 将字符串转换为数组会产生有效的 Unicode 字符,因此这是获取第 4 个字符的另一种方法:
> [...s][3]
'????'
但我无法相信从字符串到数字再到字符串,或者必须将字符串拆分为数组是做这件看似微不足道的事情的唯一方法。没有简单的方法吗?
> s.simpleMethod(3)
'????'
注意:我知道“字符”的定义有些模糊,但就本问题而言,字符只是对应于 Unicode 代码点的符号(无组合字符、无字形簇等)。
更新:String.fromCodePoint(str.codePointAt(n)) 方法实际上并不可行,因为那里的 nth 位置没有考虑以前的星体符号:String.fromCodePoint('????????'.codePointAt(1)) // => '�'
(我觉得这个问题有点愚蠢;好像我可能遗漏了一些明显的东西。但是previous answers 这个问题不适用于星体平面上带有 Unicode 符号的字符串。)
【问题讨论】:
-
你看过这个页面developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 有一些代码示例吗?
-
@ivo 不,我没见过,有趣!代码示例有一个“固定”版本的 charAt,这很有用,但我想知道是否有一个好的方法已经支持该语言????
-
这是 Javascript。简单的事情不可能那么简单:)
-
如果 jQ 是您的选择,它内置在 there jsfiddle.net/bq2w3fub ????
-
@rndus2r 嗯,我看不出 jQ 在这里有什么帮助,jQ 的 text() 按原样返回字符串,并且不以 ant 特殊方式处理星体字符,看起来:jsfiddle.net/epidemian/ha8ydznk
标签: javascript unicode