Неанглийские символы в Kodi API

Я использую Kodi API для управления своим htpc через asp.net. Особенно функция под названием "Playlist.Add". Json, который я отправляю, выглядит так:

{"jsonrpc":"2.0","method":"Playlist.Insert","params":{"playlistid":0,"position":0,"item":{"file":"smb://server/Ferry Corsten/Beautiful/Ferry Corsten - Beautiful (Extended).mp3"}},"id":1}

Это работает нормально. Но когда в строке есть не английские символы:

{"jsonrpc":"2.0","method":"Playlist.Insert","params":{"playlistid":0,"position":0,"item":{"file":"smb://server/01-Zum Geburtstag viel Glück.mp3"}},"id":1}

Это просто исключение "RequestCanceled".

Мой источник С# выглядит так:

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(_url);
                string authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(_username + ":" + _password));
                webRequest.Headers["Authorization"] = "Basic " + authInfo;

                webRequest.Method = "POST";
                webRequest.UserAgent = "KodiControl";
                webRequest.ContentType = "application/json";

                webRequest.ContentLength = json.Length;
                using (var streamWriter = new StreamWriter(webRequest.GetRequestStream()))
                {
                    streamWriter.Write(json);
                    streamWriter.Flush();
                    streamWriter.Close();
                }

Исключение выдается на streamWriter.Flush(). Итак, что мне нужно сделать, чтобы отправить этот запрос?``


person Chris    schedule 06.03.2016    source источник
comment
просто предположение: возможно, вам нужно кодировать запрос с помощью UTF-8.   -  person andpei    schedule 07.04.2016


Ответы (1)


Я предлагаю вам изучить Kodi addon unicode paths Следуя этому руководству поможет вам предотвратить распространенные проблемы с нелатинскими символами в Kodi.

Python работает только со строками Unicode внутри, конвертируя их в определенную кодировку на выходе. (или ввод)». Чтобы сделать строковые литералы юникодными по умолчанию, добавьте

from __future__ import unicode_literals

Путь к надстройке

path = addon.getAddonInfo('path').decode('utf-8')

.decode('utf-8') говорит коди декодировать данную функцию, используя utf-8. Kodi getAddonInfo возвращает строку в кодировке UTF-8, и мы декодируем ее в юникоде.

Диалоговое окно просмотра

dialog = xbmcgui.Dialog()
directory = dialog.browse(0, 'Title' , 'pictures').decode('utf-8')

dialog.browse() возвращает строку в кодировке UTF-8, которая, возможно, содержит некоторые нелатинские символы. Поэтому раскодируйте его в юникод!

person evilpanda    schedule 15.11.2016
comment
Вместо того, чтобы просто ссылаться на руководство, возможно, вы можете дать некоторую конкретную информацию в этом посте на случай, если ссылки не работают и будущим пользователям понадобится помощь. - person Fencer04; 16.11.2016