2013-12-02 26 views
0

Я видел много 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.

+0

Он хочет нормализатора нормализовать 'é', но он работает только, если он делает' \ u00E9' – nhgrif

+1

@nhgrif: Что такое é, что указывает на проблему с кодировкой. –

+0

Любопытно, что ваш первый пример в groovyconsole дает мне 'now-is-the-time'? –

ответ

2

Учитывая, что ваш второй фрагмент работает, я сильно подозреваю, что для первого фрагмента кодировка, которую вы используете в своем редакторе, не совпадает с кодировкой, используемым вашим интерпретатором Groovy/компилятором.

Другими словами, проблема не в второй строки кода - это в первую линии. Вы не начинаете с текста ввода, который, по вашему мнению, вы есть.

+0

Ну, все хорошо и хорошо. Я использую возвышенное прямо сейчас, чтобы проверить это. Какое решение? Как синхронизировать кодировку? – Gregg

+0

Написание одного и того же кода в VI имеет те же результаты, é удаляется. – Gregg

+0

@Gregg: Ну, вам нужно выяснить, какую кодировку вы используете в Sublime, и узнать, как она работает Groovy (или что-то там, где вы ее запускаете), и посмотреть, можете ли вы пройти в кодировке. –

Смежные вопросы