Я пытаюсь удалить все диакритические знаки из строки во время проверки (дополнительную информацию см. Ниже).Чтобы сделать это, я использую следующий код:
private static String stripAccents(final String s) {
if(s == null) {
return "";
}
return Normalizer.normalize(s, Normalizer.Form.NFD).replaceAll("[\\p{InCombiningDiacriticalMarks}]", "");
}
Моя проблема в том, что это не работает для символа "ø", который остается как есть.После поиска класса символов «InCombiningDiacriticalMarks» я обнаружил вопрос: Какие встроенные классы символов регулярного выражения поддерживаются Java
Это привело меня к официальному списку Unicode всего, что считается диакритическимотметьте здесь: https://www.unicode.org/charts/PDF/U0300.pdf, и кодовая точка 0338, кажется, очень хорошо соответствует "ø".
Я что-то упустил, или класс символов "InCombiningDiacriticalMarks" не полностью поддерживаетсяв java?
Относительно того, ПОЧЕМУ мне это нужно, некоторые сведения:
Я отправляю данные, содержащие скандинавские символы, наружу, и когда они отправляют данные обратноу них есть забавная привычка удалять или даже заменять диакритические знаки (например, ø становится ö).Я пытался заставить их делать это правильно, но просто не буду, и у меня нет никакого способа заставить их сделать это.
Итак, чтобы сравнить данные, чтобы убедиться, что то, что было отправлено, мы получаем обратно, янеобходимо удалить все диакритические знаки, чтобы избежать тонны ложных срабатываний.