PVar и русская кодировка
#1

Привет. Недавно столкнулся с такой проблемой. Pvar String косячит, если записывать русские слова. По началу все было отлично, но вот заметил что теперь возвращает стринг примерно такой: яяявяяяаяяявяяяаяяявяяяа
Подскажите пожалуйста люди добрые, в чем может быть проблема?
Reply
#2

Quote:
Originally Posted by SlootLite
Посмотреть сообщение
Привет. Недавно столкнулся с такой проблемой. Pvar String косячит, если записывать русские слова. По началу все было отлично, но вот заметил что теперь возвращает стринг примерно такой: яяявяяяаяяявяяяаяяявяяяа
Подскажите пожалуйста люди добрые, в чем может быть проблема?
Не должно такого быть... В какой кодировке файлы скрипта? Если перед выводом поставить пробел?
Reply
#3

Если ты про файлы где хранятся данные от игроков и т.д., то у меня мускул. И даже если бы был баг в нем, то тогда вопросы бы выводило. Так что он откидывается.
Reply
#4

Quote:
Originally Posted by SlootLite
Посмотреть сообщение
Если ты про файлы где хранятся данные от игроков и т.д., то у меня мускул. И даже если бы был баг в нем, то тогда вопросы бы выводило. Так что он откидывается.
покажи строки записи в PVar и вывода, там где крякозябры появляются.
Reply
#5

Подобная кракозабра появляется при неправильном использование format() проверь чтобы %s и %d не путались.
Reply
#6

Код:
case 41:
{
if(response)
{
if(!strlen(inputtext)) return ShowPlayerDialog(playerid,41,DIALOG_STYLE_INPUT,"Новый контакт","Введите имя нового контакта\nМаксимально 20 символов\nВы не ввели имя контакта","Ок","Назад");
if(!strcmp(inputtext,"none",true)) return ShowPlayerDialog(playerid,41,DIALOG_STYLE_INPUT,"Новый контакт","Введите имя нового контакта\nМаксимально 20 символов\nИмя none запрещено","Ок","Назад");
if(strlen(inputtext) >= 1 && strlen(inputtext) <= 20)
{
new name[MAX_PLAYER_NAME];
for(new i = 1; i < 18; i++)
{
format(string,256,"ContName%d",i);
GetPVarString(playerid,string,name,sizeof(name));
if(!strcmp(name,"none",true))
{
SetPVarString(playerid,"NameNewCont",inputtext);
SetPVarInt(playerid,"NewCont",i);
ShowPlayerDialog(playerid,42,DIALOG_STYLE_INPUT,"Новый контакт","Введите номер контакта\nМаксимально 6 символов","Ок","Назад");
break;
}
}
}
else
{
ShowPlayerDialog(playerid,41,DIALOG_STYLE_INPUT,"Новый контакт","Введите имя нового контакта\nМаксимально 20 символов","Ок","Назад");
}
}
else
{
CreatePhone(playerid);
Contackt(playerid);
}
}
case 42:
{
if(response)
{
if(!strlen(inputtext)) return ShowPlayerDialog(playerid,42,DIALOG_STYLE_INPUT,"Новый контакт","Введите номер контакта\nМаксимально 6 символов","Ок","Назад");
if(strlen(inputtext) >= 1 && strlen(inputtext) <= 6)
{
new num = strval(inputtext);
new name[MAX_PLAYER_NAME];
GetPVarString(playerid,"NameNewCont",name,sizeof(name));
format(string,256,"ContName%d",GetPVarInt(playerid,"NewCont"));
SetPVarString(playerid,string,name);
format(string,256,"ContNumber%d",GetPVarInt(playerid,"NewCont"));
SetPVarInt(playerid,string,num);
CreatePhone(playerid);
Contackt(playerid);
}
else
{
ShowPlayerDialog(playerid,42,DIALOG_STYLE_INPUT,"Новый контакт","Введите номер контакта\nМаксимально 6 символов","Ок","Назад");
}
}
else
{
ShowPlayerDialog(playerid,41,DIALOG_STYLE_INPUT,"Новый контакт","Введите имя нового контакта\nМаксимально 20 символов","Ок","Назад");
}
}
В первом диалоге записываю в NameNewCont
Во втором записываю ContNumber1 например, и когда беру текст из этой переменной, то беруться кракозябры.
Reply
#7

короче.

PHP код:
stock GetPVarStringFix(playeridvarname[], string_return[], len sizeof string_return)
{
    
GetPVarString(playeridvarnamestring_returnlen);
    
    for(new 
istring_return[i] != EOSi++)
        if(
string_return[i] < string_return[i] += 256;

попробуй это.
Reply
#8

Раньше, точно знаю, была проблема вроде:
pawn Код:
new str[32] = "Привет";
new abc[64];
format(abc, sizeof(abc), "%s тут любой текст", str);
SendClientMessage(playerid, -1, abc);
Игроку приходило сообщение вида "япврявпвпвавапрвварп"
Лечилось это очень просто - добавление пробела перед %s в format
pawn Код:
format(abc, sizeof(abc), " %s тут любой текст", str);
Reply
#9

Quote:
Originally Posted by OFFREAL
Посмотреть сообщение
Раньше, точно знаю, была проблема вроде:
pawn Код:
new str[32] = "Привет";
new abc[64];
format(abc, sizeof(abc), "%s тут любой текст", str);
SendClientMessage(playerid, -1, abc);
Игроку приходило сообщение вида "япврявпвпвавапрвварп"
Лечилось это очень просто - добавление пробела перед %s в format
pawn Код:
format(abc, sizeof(abc), " %s тут любой текст", str);
этой проблемы нет с тех пор как sa-mp перешел на юникод
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)