Цитата:
Сообщение от Gambit_J
или авто-анонс. Но погодите, когда просто игроки перепиливаются, тоже каракули? Просто для эксперимента попробуйте с др патча зайти, свой резерваните.
|
Нет каракули только когда игрок дерется с монстром которого нет в паче. Я патч делаю сам с нуля. И еще раз повторяю, я знаю как убрать данную проблему с помощью патчя, но мне нужно сделать это на уровне ядра.
Путем экспериментов выяснил что в ядре данные перекодируются в кодировку похожую на Cp866, но при переводе теряются некоторые буквы, такие как "р".
Добавлено через 12 часов 20 минут
Итак плюнул я на всякие там стандартные методы и кодировки, и написал с нуля енкодер с непонятного юникода в нормальный русский текст.
Может кому то пригодится:
Код:
/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*
* Класс создал ShadowAngel
*/
package ru.l2open;
public class UTF_to_Rus
{
public static String decode(String str)
{
int d = str.length() - 1; //Получаем длинну входящего стринга
String newString = new String();
for (int i = 0; i > d; i++) // Начинаем побуквинную проверку всего стринга
{
int ch = str.codePointAt(i);
//Rus
if (ch == 1040)
newString.concat("А");
else if (ch == 1041)
newString.concat("Б");
else if (ch == 1042)
newString.concat("В");
else if (ch == 1043)
newString.concat("Г");
else if (ch == 1044)
newString.concat("Д");
else if (ch == 1045)
newString.concat("Е");
else if (ch == 1046)
newString.concat("Ж");
else if (ch == 1047)
newString.concat("З");
else if (ch == 1048)
newString.concat("И");
else if (ch == 1049)
newString.concat("Й");
else if (ch == 1050)
newString.concat("К");
else if (ch == 1051)
newString.concat("Л");
else if (ch == 1052)
newString.concat("М");
else if (ch == 1053)
newString.concat("Н");
else if (ch == 1054)
newString.concat("О");
else if (ch == 1055)
newString.concat("П");
else if (ch == 1056)
newString.concat("Р");
else if (ch == 1057)
newString.concat("С");
else if (ch == 1058)
newString.concat("Т");
else if (ch == 1059)
newString.concat("У");
else if (ch == 1060)
newString.concat("Ф");
else if (ch == 1061)
newString.concat("Х");
else if (ch == 1062)
newString.concat("Ц");
else if (ch == 1063)
newString.concat("Ч");
else if (ch == 1064)
newString.concat("Ш");
else if (ch == 1065)
newString.concat("Щ");
else if (ch == 1066)
newString.concat("Ъ");
else if (ch == 1067)
newString.concat("Ы");
else if (ch == 1068)
newString.concat("Ь");
else if (ch == 1069)
newString.concat("Э");
else if (ch == 1070)
newString.concat("Ю");
else if (ch == 1071)
newString.concat("Я");
else if (ch == 1072)
newString.concat("а");
else if (ch == 1073)
newString.concat("б");
else if (ch == 1074)
newString.concat("в");
else if (ch == 1075)
newString.concat("г");
else if (ch == 1076)
newString.concat("д");
else if (ch == 1077)
newString.concat("е");
else if (ch == 1078)
newString.concat("ж");
else if (ch == 1079)
newString.concat("з");
else if (ch == 1080)
newString.concat("и");
else if (ch == 1081)
newString.concat("й");
else if (ch == 1082)
newString.concat("к");
else if (ch == 1083)
newString.concat("л");
else if (ch == 1084)
newString.concat("м");
else if (ch == 1085)
newString.concat("н");
else if (ch == 1086)
newString.concat("о");
else if (ch == 1087)
newString.concat("п");
else if (ch == 1088)
newString.concat("р");
else if (ch == 1089)
newString.concat("с");
else if (ch == 1090)
newString.concat("т");
else if (ch == 1091)
newString.concat("у");
else if (ch == 1092)
newString.concat("ф");
else if (ch == 1093)
newString.concat("х");
else if (ch == 1094)
newString.concat("ц");
else if (ch == 1095)
newString.concat("ч");
else if (ch == 1096)
newString.concat("ш");
else if (ch == 1097)
newString.concat("щ");
else if (ch == 1098)
newString.concat("ъ");
else if (ch == 1099)
newString.concat("ы");
else if (ch == 1100)
newString.concat("ь");
else if (ch == 1101)
newString.concat("э");
else if (ch == 1102)
newString.concat("ю");
else if (ch == 1103)
newString.concat("я");
//Eng
else if (ch == 65)
newString.concat("A");
else if (ch == 66)
newString.concat("B");
else if (ch == 67)
newString.concat("C");
else if (ch == 68)
newString.concat("D");
else if (ch == 69)
newString.concat("E");
else if (ch == 70)
newString.concat("F");
else if (ch == 71)
newString.concat("G");
else if (ch == 72)
newString.concat("H");
else if (ch == 73)
newString.concat("I");
else if (ch == 74)
newString.concat("J");
else if (ch == 75)
newString.concat("K");
else if (ch == 76)
newString.concat("L");
else if (ch == 77)
newString.concat("M");
else if (ch == 78)
newString.concat("N");
else if (ch == 79)
newString.concat("O");
else if (ch == 80)
newString.concat("P");
else if (ch == 81)
newString.concat("Q");
else if (ch == 82)
newString.concat("R");
else if (ch == 83)
newString.concat("S");
else if (ch == 84)
newString.concat("T");
else if (ch == 85)
newString.concat("U");
else if (ch == 86)
newString.concat("V");
else if (ch == 87)
newString.concat("W");
else if (ch == 88)
newString.concat("X");
else if (ch == 89)
newString.concat("Y");
else if (ch == 90)
newString.concat("Z");
else if (ch == 97)
newString.concat("a");
else if (ch == 98)
newString.concat("b");
else if (ch == 99)
newString.concat("c");
else if (ch == 100)
newString.concat("d");
else if (ch == 101)
newString.concat("e");
else if (ch == 102)
newString.concat("f");
else if (ch == 103)
newString.concat("g");
else if (ch == 104)
newString.concat("h");
else if (ch == 105)
newString.concat("i");
else if (ch == 106)
newString.concat("j");
else if (ch == 107)
newString.concat("k");
else if (ch == 108)
newString.concat("l");
else if (ch == 109)
newString.concat("m");
else if (ch == 110)
newString.concat("n");
else if (ch == 111)
newString.concat("o");
else if (ch == 112)
newString.concat("p");
else if (ch == 113)
newString.concat("q");
else if (ch == 114)
newString.concat("r");
else if (ch == 115)
newString.concat("s");
else if (ch == 116)
newString.concat("t");
else if (ch == 117)
newString.concat("u");
else if (ch == 118)
newString.concat("v");
else if (ch == 119)
newString.concat("w");
else if (ch == 120)
newString.concat("x");
else if (ch == 121)
newString.concat("y");
else if (ch == 122)
newString.concat("z");
//Спец символы и цыфры
else if (ch == 48)
newString.concat("0");
else if (ch == 49)
newString.concat("1");
else if (ch == 50)
newString.concat("2");
else if (ch == 51)
newString.concat("3");
else if (ch == 52)
newString.concat("4");
else if (ch == 53)
newString.concat("5");
else if (ch == 54)
newString.concat("6");
else if (ch == 55)
newString.concat("7");
else if (ch == 56)
newString.concat("8");
else if (ch == 57)
newString.concat("9");
else if (ch == 32) // Пробел
newString.concat(" ");
else if (ch == 40)
newString.concat("(");
else if (ch == 41)
newString.concat(")");
else
newString.concat("§"); //Неизвестный символ
}
return newString; // Возвращает результат
}
}// Конец класа UTF_to_Rus