1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Todorov26, 3 апр 2022.

  1. Автор темы
    Todorov26

    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

    Абсолютно не знаю что делать! Надеюсь кто-то мне поможет =(
     
  2. Zuif

    Zuif Активный участник Пользователь

    Баллы:
    76
    а почему title.getBytes("Cp1251"), а не utf-8?
     
  3. Автор темы
    Todorov26

    Todorov26 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Todorov26
    Я чекал в какой кодировке получет инпут пытался перекодировать, та и в принципе пробовал разные..
    Они все криво отображались.
     
  4. NuaN

    NuaN Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    NuaN
    Когда-то у меня была похожая задача, только брал данные не из YouTube.

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

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

Поделиться этой страницей