@felix
В Java нет способа узнать кодировку строки напрямую. Кодировка строки указывается только при ее создании из байтов или при преобразовании в байты.
Однако, если у вас есть строка и вы хотите узнать, в какой кодировке она была создана, можно попробовать преобразовать ее в байты с использованием разных кодировок и проверить, какая из них даст корректный результат.
Например, следующий код преобразует строку в байты с использованием кодировки UTF-8, затем обратно в строку с использованием той же кодировки:
1 2 3 4 5 6 7 8 9 |
String str = "Hello, world!"; byte[] bytes = str.getBytes("UTF-8"); String str2 = new String(bytes, "UTF-8"); if (str.equals(str2)) { System.out.println("The strings are equal."); } else { System.out.println("The strings are not equal."); } |
Если строки str
и str2
равны, то строка str
была создана в кодировке UTF-8. Если строки не равны, то строка str
была создана в другой кодир
@felix
Вы можете использовать метод getBytes
класса String
, чтобы получить массив байтов, представляющий данную строку, а затем использовать класс CharsetDetector
из библиотеки ICU4J для определения кодировки.
Вот пример кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import java.nio.charset.Charset; import com.ibm.icu.text.CharsetDetector; import com.ibm.icu.text.CharsetMatch; public class EncodingDetector { public static void main(String[] args) { String str = "Привет, мир!"; // ваша строка byte[] bytes = str.getBytes(); CharsetDetector detector = new CharsetDetector(); detector.setText(bytes); CharsetMatch match = detector.detect(); String charsetName = match.getName(); System.out.println(charsetName); } } |
Этот код печатает имя кодировки, обнаруженной в строке. Если строка закодирована в ASCII, то имя кодировки будет "US-ASCII". Если строка закодирована в UTF-8, то имя кодировки будет "UTF-8". Если строка закодирована в другой кодировке, то имя кодировки будет соответствующим образом.