Как узнать кодировку строки в java?

Пользователь

от felix , в категории: Java , 3 года назад

Как узнать кодировку строки в java?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от marc_zboncak , 2 года назад

@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 была создана в другой кодир

Пользователь

от nelle , год назад

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