преобразование кодовой точки java строки unicode в символ

#java #string #unicode #codepoint

#java #строка #unicode #кодовая точка

Вопрос:

Хорошо, итак, я чувствую, что этот вопрос задавался много раз, но я не могу найти ответ. Я сравниваю два разных файла, которые были сгенерированы двумя разными программами. Конечно, обе программы генерируют файлы из одних и тех же запросов к БД. Я сталкиваюсь со следующими различиями:

s1 = Samsung - Mobile USB Chargers

против.

s2 = Samsung u2013 Mobile USB Chargers

Как мне преобразовать s2 в s1 или, что еще лучше, как мне сравнить их без получения разницы? Кто-то где-то в широком Интернете упомянул об использовании класса StringUtils ApacheCommons-lang, но я не смог найти ничего полезного.

Комментарии:

1. Обратите внимание, что первая строка имеет дефис ASCII (через ДЕФИС МИНУС), в то время как вторая имеет ТИРЕ.

2. Хм, то есть вы хотите сказать, что две строки нельзя сравнить каким-либо простым способом, кроме создания какой-то таблицы поиска?

Ответ №1:

Вы могли бы сложить все символы с помощью свойства Dash_Punctuation.

Этот код будет напечатан true :

 boolean equal = "Samsung u2013 Mobile USB Chargers"
                    .replaceAll("\p{Pd}", "-")
                    .equals("Samsung - Mobile USB Chargers");
System.out.println(equal);
  

Обратите внимание, что это будет применяться ко всем символам с этим свойством (например, 〰 U 3030 ВОЛНИСТАЯ ЧЕРТОЧКА). Полный список символов со свойством Dash_Punctuation (Pd) находится в UnicodeData.txt. Java 6 поддерживает Unicode 4. Обсуждение пунктуации см. в главе 6.

Комментарии:

1. Очень интересно. Я думаю, что это приближает меня к моему ответу, и я продолжу исследование. Сейчас я дам вам принятый ответ и прочитаю эту ссылку в юникоде, которой вы поделились.

2. @Mohamed Nuur — Я внес некоторые исправления в свой пост; некоторые символы тире, упомянутые в главе 6 (например, ТИЛЬДА U 007E), не имеют свойства Pd.

Ответ №2:

Программа, сгенерировавшая первую строку, записывает файл в ASCII, используя резервный механизм замены символов. Второй способ заключается в записи файла в Unicode.

Их можно сравнить, создав копию второго файла в ASCII с использованием того же резервного механизма.

Лучшим решением было бы модифицировать первую программу так, чтобы она также использовала Unicode.

(Возможно, что во втором файле использовалось что-то другое, кроме Unicode, поскольку некоторые другие наборы символов включают тире en. Если это так, то лучшим решением будет записать оба файла в Unicode, если это возможно.)

Комментарии:

1. невозможно изменить какой-либо из выходных данных. Да, одна из них написана в Unicode, а другая, по-моему, в ascii. хотя я не уверен на 100%. по сути, одно из них является устаревшим приложением c , а другое — приложением Java. итак, мы заметили много изменений из-за символов / кодовых точек Unicode. каков наилучший способ игнорировать эти изменения?