JavaScript中indexOf/charAt处理日语半角片假名异常问题咨询
问题原因解释
你遇到的现象核心原因是半角片假名的浊点是独立的UTF-16码元,字符串 'トゲ' 本质是由三个独立字符组成的:
- 索引0:
ト(半角片假名“ト”,Unicode码点U+FF84) - 索引1:
ケ(半角片假名“ケ”,Unicode码点U+FF99) - 索引2:
゙(半角片假名浊点,Unicode码点U+FF9E)
视觉上ケ和゙连在一起会看起来像全角片假名“ゲ”(单个Unicode字符U+30B2),但在JavaScript字符串里它们是完全分开的两个独立字符。所以:
'トゲ'.indexOf('ケ')返回1,是因为ケ确实处于索引1的位置;'トゲ'.charAt(1)返回ケ,就是直接取到了索引1对应的这个独立字符。
如果希望ケ和゙成为逻辑和视觉统一的“ゲ”,应该直接使用全角片假名'ゲ'(单个Unicode字符),而非半角字符的组合。
内容的提问来源于stack exchange,提问作者code đờ
相关产品推荐
相关产品推荐

