Помогите Кодировочка, api

Todorov26

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Todorov26
Балуюсь с ютуб api, пытаюсь получить текст и засунуть в название предмета.

Немного кода:

/*Получение данных*/
Код:
public String getData(String urlAddress) {
        StringBuilder get = new StringBuilder();
        try {
            HttpURLConnection url = (HttpURLConnection)(new URL(urlAddress)).openConnection();
            url.setDoOutput(true);
            url.setRequestProperty("User-Agent", "Mozilla/5.0 ( compatible ) ");
            url.setRequestProperty("Accept", "*/*");
            url.setRequestProperty("Accept-Charset", "utf-8");

            InputStream inputStream = (url.getResponseCode() >= 400) ? url.getErrorStream() : url.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            bufferedReader.lines().forEach(get::append);
            bufferedReader.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return get.toString();
    }

/*Получение названия видоса*/
Код:
public String getTitle(String url){
        String title =
new JsonParser().parse(api.getData(api.URI_REQUEST.replace("{token}", api.youtubeToken).replace("{id}", url.split("v=")[1]))).getAsJsonObject().get("items").getAsJsonArray().get(0).getAsJsonObject().get("snippet").getAsJsonObject().get("localized").getAsJsonObject().get("title").getAsString();

        try {
            title = new String(title.getBytes("Cp1251"), StandardCharsets.UTF_8);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        return (title.length() >= 52) ? title.substring(0, 52).concat("..") : title;
    }
/*Вставка в инвентарь*/

Код:
String name = getTitle("https://www.youtube.com/watch?v=n39_W18m_pA");
ItemStack item = new ItemStack(Material.SKULL_ITEM, 1, (short) 3);
SkullMeta meta = (SkullMeta)item.getItemMeta();
meta.setDisplayName(Utils.color(name));

item.setItemMeta(meta);
inventory.addItem(item);

YouTube api (По крайней мере в браузере) передает в utf-8

А в инвентаре происходит какая-то хрень...
upload_2022-4-3_1-53-46.png

Абсолютно не знаю что делать! Надеюсь кто-то мне поможет =(
 
а почему title.getBytes("Cp1251"), а не utf-8?
Я чекал в какой кодировке получет инпут пытался перекодировать, та и в принципе пробовал разные..
Они все криво отображались.
 
Когда-то у меня была похожая задача, только брал данные не из YouTube.

Попробуй такую кодировку:
Код:
title = new String(title.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
Я честно не знаю почему именно так - пришел методом тыка, но почему-то оно работало у меня)

Если не сработает, попробуй перебери разные кодировки, может на какой-то заработает.
 
Назад
Верх