Удаление диакритических знаков и проблем с платформой - PullRequest
4 голосов
/ 10 мая 2011

У меня есть этот метод для удаления диакритических знаков из строки в Java:

String nfdNormalizedString = Normalizer.normalize(str, Normalizer.Form.NFD);
Pattern pattern = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
return pattern.matcher(nfdNormalizedString).replaceAll("");

У меня есть несколько простых тестов для этого. Они проходят, когда я запускаю их изнутри моей IDE, но не удается, когда я пробую их из Maven. Я вызываю maven из командной строки, и моя кодировка среды - UTF-8. Я использую последний патч Java 6, предоставленный Apple.

Я не знаю, что такое кодировка внутри IDE, но она использует ту же Java. Любая мысль о том, что может вызвать эту проблему?

1 Ответ

1 голос
/ 10 мая 2011

Я полагаю, это вызвано неправильной обработкой входной кодировки.

Если в источнике указаны входные строки, необходимо убедиться, что кодировка источника соответствует кодировке в конфигурации компилятора. Обратите внимание, что Maven требует отдельной конфигурации кодировки компилятора как свойства с именем project.build.sourceEncoding в pom.xml:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    ...
</properties>

В качестве быстрой проверки вы также можете заменить символы в строковых литералах на их экранирование Unicode (\uxxxx) - если проблема вызвана кодировкой источника, она должна исчезнуть.

Если вы читаете дату ввода из файла, убедитесь, что вы правильно указали кодировку файла в своем коде и не используете методы, основанные на кодировке системы по умолчанию.

Смотри также:

...