【问题标题】: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 字符串可能包含 许多 个非常不同的字母表的代码点。
  • 这个术语是“转录”或“音译”,可能有一些图书馆。

标签: javascript utf-8 ascii iconv


【解决方案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 列出此代码无法替换的字母:stackoverflow.com/questions/990904/…
【解决方案2】:

正如@Pointy 所说,您唯一的选择是根据字典映射/替换字符。

你会发现这真的很有用:https://github.com/backbone-paginator/backbone.paginator/blob/a579796a30e583c4dfa09e0a86e4abd21e0b5b56/plugins/diacritic.js

【讨论】:

【解决方案3】:

现在有一个iconv到JS的端口:https://www.npmjs.com/package/iconv

var iconv = new Iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE');
iconv.convert('ça va が'); // "ca va "

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 2019-10-31
    • 2016-08-31
    • 2021-03-08
    • 2011-06-26
    • 1970-01-01
    • 2011-06-19
    相关资源
    最近更新 更多