@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". Если строка закодирована в другой кодировке, то имя кодировки будет соответствующим образом.