![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Здравствуйте.
Проблема в том, функция DLL* возвращает PansiChar. Не могу понять\найти как конвертировать в String ибо русские буквы кракозябры, но не всегда**. * == Bass.dll. ** онлайн радио. Например 'РадиоСибирь' исполнитель и название пишется нормально. А вот RadioRcord rus черти что, в WMP все ОК. Как правильно сделать? Последний раз редактировалось Stalker2-42, 23.04.2017 в 18:25. |
|
#2
|
||||
|
||||
|
Делфи должна сама преобразовывать PAnsiChar в String/WideString при присваивании без явного преобразования типов.
Может быть проблема в том, что строка как раз-таки не всегда PAnsiChar? Посмотри под отладкой значения в памяти по указателю PAnsiChar в обоих случаях. |
|
#3
|
|||
|
|||
|
Не совсем так. С юникодом там чуть-чуть посложнее.
Попробуй примерно так: Код:
type TCyrString = AnsiString(1251); // указываем кодовую страницу var a_s : TCyrString; apc : PAnsiChar; s : String; // UnicodeString by default begin ... dll_function_call(apc); a_s := TCyrString(apc); s := a_s; Последний раз редактировалось lmikle, 12.04.2017 в 17:59. |
|
#4
|
||||
|
||||
|
Цитата:
К сожалению так же и осталось. Подсмотрел здесь Осмелюсь поправить..... Код:
type TCyrString = type AnsiString(1251); // указываем кодовую страницу Почему-то изменения цвета в коде не работает. У меня так: Код:
var meta: PAnsiChar; Sstr : String; ...... Meta :=DLL_Func(); .... Sstr := Utf8ToWideString(meta); Как-то очень просто. Может еще какие варианты имеются? |
|
#5
|
|||
|
|||
|
Цитата:
ну, да. Сорь... про...зевал... по инерции просто type нашкрябал. Utf8ToWideString... а что в доке на тему возращаемого значения написано??? Т.е. если там действительно возвращается UTF-8, то будет работать. Тюею надо смотреть что же возвращает функция... бо как PAnsiChar, как я понимаю, просто для совместимости с char* |
|
#6
|
||||
|
||||
|
Цитата:
Чуть позже еще поработаю над этим. |
|
#7
|
|||
|
|||
|
Цитата:
дык может тогда описать возвращаемое значение как PWideChar и тогда напрямую присваивать String, который UnicodeString? |
|
#8
|
||||
|
||||
|
Приветствую.
Не понятно работает способ UTF8ToString. Я запутался. Интернет не помог. Повторюсь: От одного url(РадиоСибирь) , вместо русских букв пишет ромбики в которых вопросительные знаки(латиница - нормально ) , от остальных URL, где присутствует кириллица все нормально.В оригинальном коде из примера: (злощастного url(РадиоСибирь) все нормально, но другие станции(RUS) - кракозябры) Код:
var
meta: PAnsiChar;
begin
meta := BASS_ChannelGetTags(chan, BASS_TAG_META);
if (meta <> nil) then
begin
p := Pos('StreamTitle=', String(AnsiString(meta)));
if (p = 0) then
Exit;
p := p + 13;
SendMessage(win, WM_INFO_UPDATE, 7, DWORD(PAnsiChar(AnsiString(Copy(meta, p, Pos(';', String(meta)) - p - 1)))));
end;С костылем, из всех имеющихся станций с кириллицей , нормальные, читаемые слова. А "РадиоСибирь" ересь. Код:
var
meta: PAnsiChar;
p: Integer;
S : string;
begin
meta := BASS_ChannelGetTags(Channel, BASS_TAG_META);
if (meta <> nil) then
begin
S := UTF8ToString(meta);
p := Pos('StreamTitle=', s);
if (p = 0) then
Exit;
p := p + 13;
UpdateWin(3, PChar(Copy(S, p, Pos(';', S) - p - 1)));
end;Куда рыть? PS: проверил эту станцию в WMP, вместо исполнителя и названия песни только название станции. Что за кодировка??? Последний раз редактировалось Stalker2-42, 23.04.2017 в 18:15. |