将 Javascript UTF-8 转换为 ASCII(如 PHP 中的 Iconv('UTF-8', 'ASCII//TRANSLIT', $string) )
Posted
技术标签:
【中文标题】将 Javascript UTF-8 转换为 ASCII(如 PHP 中的 Iconv(\'UTF-8\', \'ASCII//TRANSLIT\', $string) )【英文标题】:Convert Javascript UTF-8 to ASCII (like Iconv('UTF-8', 'ASCII//TRANSLIT', $string) in PHP)将 Javascript UTF-8 转换为 ASCII(如 PHP 中的 Iconv('UTF-8', 'ASCII//TRANSLIT', $string) ) 【发布时间】:2012-10-29 20:44:30 【问题描述】:我想知道如何使用 javascript 将 UTF-8 中的字符“翻译”为最接近的 ASCII 等效字符,就像 php 中的 Iconv 所做的那样。
例子:
ü变成uó变成o
我宁愿不使用替换,因为 a) 它需要完整的字符集,这需要大量工作,并且 b) 我很难获得完整的字符集,我会永远不要确定我是否缺少一两个。
【问题讨论】:
当您说“UTF-8”时,您真的是指 UTF-8 吗?就像一串“字符”,其元素实际上根本不是字符,而只是提升为 16 位的 UTF-8 代码单元?还是您的意思是“Unicode”,即普通的 JavaScript UTF-16 字符串? 这是可能的,但除了将 Unicode 值映射到您(或某人)认为合适的任何 ASCII“等效”值之外,没有算法方法可以做到这一点。请注意,UTF-8 字符串可能包含 许多 个非常不同的字母表的代码点。 这个术语是“转录”或“音译”,可能有一些图书馆。 【参考方案1】:我发现的最简单的方法:
var str = "üó";
var combining = /[\u0300-\u036F]/g;
console.log(str.normalize('NFKD').replace(combining, ''));
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
【讨论】:
唯一的缺点:它是 EcmaScript 6 的一部分,并不适用于所有浏览器 另一个缺点:只包括组合标记,不包括完整的音译。 查看类似的 SO 问题并接受 cmets 的答案,为什么上述代码不起作用 - cmets 列出此代码无法替换的字母:***.com/questions/990904/…【参考方案2】:正如@Pointy 所说,您唯一的选择是根据字典映射/替换字符。
你会发现这真的很有用:https://github.com/backbone-paginator/backbone.paginator/blob/a579796a30e583c4dfa09e0a86e4abd21e0b5b56/plugins/diacritic.js
【讨论】:
这里有更多unicode.org/repos/cldr/trunk/common/transforms/Latin-ASCII.xml Uoah @Esailija !这真的很完整! :) 我意识到这是一个旧答案,但 GitHub 链接已损坏。 @Jaruba 给你,伙计 :) github.com/backbone-paginator/backbone.paginator/blob/…【参考方案3】:现在有一个iconv到JS的端口:https://www.npmjs.com/package/iconv
var iconv = new Iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE');
iconv.convert('ça va が'); // "ca va "
【讨论】:
以上是关于将 Javascript UTF-8 转换为 ASCII(如 PHP 中的 Iconv('UTF-8', 'ASCII//TRANSLIT', $string) )的主要内容,如果未能解决你的问题,请参考以下文章
将 Javascript UTF-8 转换为 ASCII(如 PHP 中的 Iconv('UTF-8', 'ASCII//TRANSLIT', $string) )
是否可以让 SQL Server 将排序规则转换为 UTF-8 / UTF-16
在 VB.NET 中将 UTF-8 转换为 windows-1255 编码