Преобразовать акцентированный текст в символы ASCII?

Я хотел бы конвертировать акцентированные буквы и различные кодировки в простой английский ASCII в Javascript и удивляться, каковы возможные варианты. Что мне нужно, это что:

éclair ~becomes~ eclair

bär ~becomes~ bar

привет ~becomes~ privet

こんにちは ~becomes~ konnichiva

Как вы можете видеть, идея заключается в том, что любой язык конвертируется в простой английский ASCII-эквивалент. Буквы áčçéñtèd преобразуются в их простые эквиваленты, буквы в кириллическом или японском кодировании преобразуются в их транслитерированный эквивалент.

Кто-нибудь знает подход, чтобы сделать это в Javascript?

3 ответа

Решение

Существует целый ряд модулей Node, которые делают подобные вещи, но гораздо легче, чем node-iconv, и, в частности, присутствуют во всех JS и не требуют компиляции каких-либо C или C++:

  1. узел-unidecode, кажется, делает в основном то, что вы просили:

    $ npm install unidecode
    ...
    unidecode@0.1.3 node_modules/unidecode
    $ node
    > var unidecode = require('unidecode');
    undefined
    > unidecode('éclair')
    'eclair'
    > unidecode('bär')
    'bar'
    > unidecode('привет')
    'priviet'
    > unidecode('こんにちは')
    'konnitiha'
    
  2. node-транслитератор даже легче, но ведет себя еще дальше от того, что вы просили:

    $ npm install transliterator
    ...
    transliterator@0.1.0 node_modules/transliterator
    $ node
    > var transliterator = require('transliterator');
    undefined
    > transliterator('éclair')
    'eclair'
    > transliterator('bär')
    'baer'
    > transliterator('привет')
    ''
    > transliterator('こんにちは')
    ''
    
  3. node-urlify немного ближе, но также далеко от того, что вы просили:

    $ npm install urlify
    ...
    urlify@0.3.5 node_modules/urlify
    $ node
    > var urlify = require('urlify').create({ spaces: ' ' });
    undefined
    > urlify('éclair')
    'eclair'
    > urlify('bär')
    'bar'
    > urlify('привет')
    'privet'
    > urlify('こんにちは')
    '_____'
    
  4. Наконец, когда я сделал npm install limax он напечатал много предупреждений компилятора C, но он все еще работал и наиболее близок к тому, что вы просили:

    $ npm install limax
    ...
    limax@0.0.2 node_modules/limax
    ├── speakingurl@0.9.1
    ├── pinyin2@2.0.8
    ├── hepburn@0.5.2 (bulk-replace@0.0.1)
    └── cld@0.0.6
    $ node
    > var slug = require('limax')
    undefined
    > slug('éclair')
    'eclair'
    > slug('bär')
    'baer'
    > slug('привет')
    'privet'
    > slug('こんにちは')
    'konnichiha'
    

Оформить заказ узел-iconv.

Выглядит как эквивалент узла php iconv.

Автор здесь. Вы можете попробовать модуль транслитерации. Его можно запустить как в браузере, так и в node.js без каких-либо зависимостей

Другие вопросы по тегам