You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带特殊字符的字符串转KeyCode数组问题求解决方案

解决特殊字符转正确KeyCode数组的问题

你遇到的核心问题是:直接把字符转成了它的Unicode编码(比如@的Unicode是64),但实际键盘输入@是通过Shift+2完成的,所以需要对应成[16,50]这样的键码组合。下面是具体的解决方案:

核心思路

我们需要建立一个特殊字符与对应键盘按键组合的映射表,然后遍历输入字符串的每个字符:

  • 如果是特殊字符,直接取映射表中的键码数组
  • 如果是大写字母,拆成Shift+对应小写字母的键码组合
  • 如果是普通小写字母或数字,直接取对应的按键码(这部分的Unicode码和键盘键码一致)

完整代码实现

function convertToKeyCode(text) {
  // 特殊字符到键盘键码组合的映射表,可按需补充更多字符
  const specialCharMap = {
    '@': [16, 50],
    '#': [16, 51],
    '$': [16, 52],
    '%': [16, 53],
    '^': [16, 54],
    '&': [16, 55],
    '*': [16, 56],
    '(': [16, 57],
    ')': [16, 48],
    '_': [16, 189],
    '+': [16, 187],
    '{': [16, 219],
    '}': [16, 221],
    '|': [16, 220],
    ':': [16, 186],
    '"': [16, 222],
    '<': [16, 188],
    '>': [16, 190],
    '?': [16, 191],
    '~': [16, 192]
  };

  const results = [];

  for (const char of text) {
    // 优先处理特殊字符
    if (specialCharMap[char]) {
      results.push(...specialCharMap[char]);
    } 
    // 处理大写字母(需要Shift+小写字母的组合)
    else if (char >= 'A' && char <= 'Z') {
      results.push(16, char.toLowerCase().charCodeAt(0));
    } 
    // 处理普通字符(小写字母、数字等,键码与Unicode码一致)
    else {
      results.push(char.charCodeAt(0));
    }
  }

  return results;
}

// 测试你的示例
console.log(convertToKeyCode("Hello@Today"));
// 输出:[104, 101, 108, 108, 111, 16, 50, 116, 111, 100, 97, 121]

代码说明

  1. 映射表specialCharMap:这里覆盖了常见的特殊字符与键盘组合的对应关系,你可以根据实际使用场景补充更多字符的映射。
  2. 字符遍历逻辑:
    • 特殊字符直接通过映射表获取对应的键码数组,用扩展运算符...将数组元素逐个加入结果列表
    • 大写字母需要额外添加Shift键的码(16),再加上对应小写字母的键码(小写字母的键码和它的Unicode码完全一致)
    • 普通字符直接取其Unicode码即可,因为这部分的码值和键盘键码是匹配的

内容的提问来源于stack exchange,提问作者JustCurious

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:19:17