2016-08-02 11 views
4

Как преобразовать строку, такую ​​как Příliš žluťoučký kůň úpěl ďábelské ódy. в Prilis zlutoucky kun upel dabelske ody.?Как удалить диакритические знаки (умлауты) из строки?

Исходная строка находится в Юникоде, поэтому в принципе должно быть возможно использовать нормализацию/разложение для разделения умляута.

К сожалению, я не видел никакой библиотеки в Фаро (может быть, Цинк где-то скрыт?), Который поддерживал бы либо зачистку умлаутов, либо разложение.

ответ

4

Вы можете попробовать Diacriticals пакет

Установка

Metacello new 
    smalltalkhubUser: 'Pharo' project: 'MetaRepoForPharo50'; 
    configuration: 'Diacritics'; 
    version: #development; 
    load. 

Тест

'Příliš žluťoučký kůň úpěl ďábelské ódy' asNonDiacritical. 
"'Prilis zlutoucky kun upel dabelske ody'" 
2

Нет, насколько я знаю, и алгоритм, который может это сделать, довольно дорогостоящий, поэтому вы, вероятно, не захотите использовать их реализацию Smalltalk. В компании, с которой я работаю, мы создали плагин VM, который вызывает вызовы libicu. Таким образом, нам не нужно поддерживать отдельную реализацию и получать прибыль от нативной скорости. См. ICU для справки.

+0

Производительность на самом деле не является проблемой, так как я не собираюсь применять его к массивным наборов данных (я мог бы используйте таблицу переводов, но это довольно склонно к ошибкам). Но вы предлагаете написать библиотеку UFFI для 'libicu'? –

+0

Да, в значительной степени. К сожалению, плагин, который мы написали, предназначен для Squeak 4 VM, и я не уверен, насколько он переносим новые виртуальные машины. –