如何在用户输入文本时实现UTF-8到Windows-1251编码转换
通用实现UTF-8重音字符转Windows-1251对应基础字符的方案
你现在用的逐个字符替换方式太繁琐,每次碰到新的带重音字符都得手动加规则。这里有个通用方案,不用逐个配置就能完成转换。
实现逻辑
带重音的UTF-8字符(比如Ä、è)在Unicode体系里可以拆成基础字符+独立重音标记。用String.prototype.normalize('NFD')把字符分解后,再用正则过滤掉所有非间距重音标记,就能直接得到对应的基础字符,刚好符合你要的Windows-1251风格结果。
完整代码示例
$(function(){ $('#txt').on('keyup paste change', function(){ const input = $(this); let value = input.val(); // 通用转换:分解字符并移除重音标记 value = value.normalize('NFD').replace(/[\u0300-\u036f]/g, ''); input.val(value); }) });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <p>测试粘贴:Äèíóàáó</p> <input type="text" id="txt">
效果说明
这个方法能自动处理所有带重音的Unicode字符:
- 输入
Äèíóàáó会自动转为Aeioaao - 输入
ç会转为c - 像
é→e、ï→i这类其他带重音的字符也能自动转换,完全不用额外加规则
内容的提问来源于stack exchange,提问作者G-Force53
相关产品推荐
相关产品推荐

