Я видел много Q & A здесь, на SO, связанных с этим вопросом. И я использовал несколько примеров, но что-то просто не работает:Замена специальных символов в строках
def input = 'now is thé timé'
println Normalizer.normalize(input, Normalizer.Form.NFD).replaceAll(/[^A-z0-9 ]/, "").replaceAll(/ +/, "-")
Выход вышеперечисленное
now-is-th-tim
Если я сделать следующее:
String input = 'now is th\u00E9 tim\u00E9'
println Normalizer.normalize(input, Normalizer.Form.NFD).replaceAll(/[^A-z0-9 ]/, "").replaceAll(/ +/, "-")
Я получаю
now-is-the-time
что я хочу. Я даже попробовал следующее:
def input = groovy.json.StringEscapeUtils.escapeJavaScript('now is thé timé')
println Normalizer.normalize(input, Normalizer.Form.NFD).replaceAll(/[^A-z0-9 ]/, "").replaceAll(/ +/, "-")
, но я получаю
now-is-th\u221A\u00A9-tim\u221A\u00A9
Любые предложения?
UPDATE: На основе комментариев, я попытался следующие:
import java.text.Normalizer
def input = new File('file.txt').text
def results = Normalizer.normalize(input, Normalizer.Form.NFD).replaceAll(/[^A-z0-9 ]/, "")
.replaceAll(/ +/, "-")
println results
file.txt содержит текст, который я поместил в строку. И это работает так, как ожидалось. Итак, что-то происходит с кодировкой определения строки в groovy.
Он хочет нормализатора нормализовать 'é', но он работает только, если он делает' \ u00E9' – nhgrif
@nhgrif: Что такое é, что указывает на проблему с кодировкой. –
Любопытно, что ваш первый пример в groovyconsole дает мне 'now-is-the-time'? –