将Javascript UTF-8转换为ASCII(如PHP中的Iconv(';UTF-8';,';ASCII//translatit';,$string)
我想知道如何使用Javascript将UTF-8中的字符“翻译”为最接近的ASCII等效字符,就像PHP中的Iconv doest一样 例如: ü变成u将Javascript UTF-8转换为ASCII(如PHP中的Iconv(';UTF-8';,';ASCII//translatit';,$string),javascript,utf-8,ascii,iconv,Javascript,Utf 8,Ascii,Iconv,我想知道如何使用Javascript将UTF-8中的字符“翻译”为最接近的ASCII等效字符,就像PHP中的Iconv doest一样 例如: ü变成uó变成o 我不想使用替换,因为a)它需要一组完整的字符,这需要大量的工作;b)我很难获得一组完整的字符,而且我永远无法确定是否缺少一两个。正如@Pointy所说,您唯一的选择是根据字典映射/替换字符 您会发现这非常有用:这是我找到的最简单的方法: var str = "üó"; var combining = /[\u0300-\u036F]/g
ó变成o
我不想使用替换,因为a)它需要一组完整的字符,这需要大量的工作;b)我很难获得一组完整的字符,而且我永远无法确定是否缺少一两个。正如@Pointy所说,您唯一的选择是根据字典映射/替换字符
您会发现这非常有用:这是我找到的最简单的方法:
var str = "üó";
var combining = /[\u0300-\u036F]/g;
console.log(str.normalize('NFKD').replace(combining, ''));
现在有一个iconv到JS的端口:
当你说“UTF-8”时,你真的是指UTF-8吗?比如,一个“字符”字符串,其元素实际上根本不是字符,而是提升为16位的简单UTF-8代码单元?或者你的意思是“Unicode”,即一个普通的JavaScript UTF-16字符串?这是可能的,但除了从Unicode值映射到你(或某人)认为合适的任何ASCII“等价物”之外,没有算法方法可以做到这一点。请注意,UTF-8字符串可能包含许多不同字母的代码点。这一术语是“转录”或“音译”,可能有一些库。这里有更多Uoah@Esailija!这真是太完整了!:)我意识到这是一个古老的答案,但GitHub链接已断开。@Jaruba给你,伙计:)唯一的缺点:它是EcmaScript 6的一部分,不适用于所有浏览器另一个缺点:只包含合并标记,不是完整的音译。请查看类似的SO问题和接受的答案,了解为什么上述代码不起作用的注释-注释列出了此代码无法替换的字母:
var iconv = new Iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE');
iconv.convert('ça va が'); // "ca va "