Не знаю, откуда вы берете исходную строку, но Java внутренне использует UTF-16 для представления строк.
Использование кодировок имеет смысл, когда вам нужно serialize
строка для передачи по соединению, сохранения в базе данных, печати в текстовом файле или на веб-странице.
То, что передается / сохраняется / печатается, представляет собой массив байтов String в выбранной кодировке. .
То же самое при получении / чтении значения через соединение, файл или базу данных. Вам необходимо интерпретировать байты в правильной кодировке.
String предоставляет метод getBytes()
, который получает представление String, используя кодировку платформы по умолчанию, это не рекомендуется, поскольку делает кодовую платформу зависимой. Вы можете предоставить кодировку либо String, либо getBytes("UTF-8")
, либо charset. Начиная с Java 1.7, класс StandardCharsets
предоставляет ярлыки для кодировок, которые должны поддерживать JVM, поэтому вы можете использовать getBytes(StandardCharsets.UTF_8)
.
Теперь ваш код должен выглядеть примерно так:
String tmpStr= "ALMS_à¸à¸±à¹à¸à¸à¸à¸à¸¥à¸à¸à¸°à¹à¸à¸µà¸¢à¸.pdf";
String fileName = new String(tmpStr.getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8);
Но это не даст ожидаемую строку, а только получит представление tmpStr в байтах UTF-8 и создаст новое представление строки, считывающее представление байтов UTF-8. Таким образом, после этого вы можете утверждать, что tmpStr
равно filename
.
Я подозреваю, что проблема, с которой вы сталкиваетесь, связана с тем, откуда вы читаете значение tmpStr и какая кодировка используется для его преобразования в Строка в первую очередь.