Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Фикс Rufix (исправление русского чата в windows)

Статус
Закрыто для дальнейших ответов.
repeat, а что если попробовать записать всю кириллицу в массив и уже перекодировывать каждый отдельный элемент массива?
 
не совсем понял что ты имеешь ввиду. если умеешь напиши на всевдо коде или в край на любом языке.
для тестирования я использовал lua (код не оптимизирован абсолютно). как оказалось кроме 2-х байтной кодировки ещё есть 4-х байтная (вот тут лог).
сперва я пробегался по 4-х байтной, потом по исправленному тексту 2-х байтной, чтобы при любом раскладе конвертация прошла.

PHP:
function print(data)
    if not data then data = "\n" end
    wfile:write(data.."\n")
end

function parse2b(s)
    local z = string.gsub(s,"([\195\194])(.)",function(k,v)
        if (k:byte() == 194 and v:byte() == 184) then
            utf8 = "\209\145"
        elseif (k:byte() == 195 and v:byte() >=128 and v:byte() <= 191) then
            utf8 = k:byte()*256 + v:byte() + 0xD10
            utf8 = string.format("%s%s",string.char(math.floor(utf8/256)),string.char(utf8-math.floor(utf8/256)*256))
        else utf8 = k..v
        end
        return utf8
end
)
return z
end

function parse4b(s)
    local z = string.gsub(s,"(\195[\144\145])\194(.)",function(k,v)
        if (k:byte(2) == 145) then
            utf8 = k:byte()*256 + v:byte() + 0xD40
            utf8 = string.format("%s%s",string.char(math.floor(utf8/256)),string.char(utf8-math.floor(utf8/256)*256))
        elseif (k:byte(2) == 144) then
            utf8 = k:byte()*256 + v:byte() + 0xD00
            utf8 = string.format("%s%s",string.char(math.floor(utf8/256)),string.char(utf8-math.floor(utf8/256)*256))
        else utf8 = k..v
        end
        return utf8
end
)
return z
end

local fname_in, fname_out = ...
fname_in = "server.log"
if (fname_in == nil) then
    io.write("USAGE:\n")
    io.write("ruFixer.exe inputFile outputFile\n")
    os.exit()
end
fname_out = fname_out or fname_in..".fix"

file = assert(io.open(fname_in, "r"))
wfile = assert(io.open(fname_out, "w+"))
t = file:read("*l")
repeat
    line = parse4b(t)
    line = parse2b(line)
    print(line)
    t = file:read("*l")
until t == nil
 
Код:
2011-10-14 19:20:09 [INFO] <Hiros> Dave, shas napishu qwertyuiop
2011-10-14 19:20:16 [INFO] [ruFixDebug]:йцукенгшщзхъ:
2011-10-14 19:20:16 [INFO] <Hiros> йцукенгшщзхъ
2011-10-14 19:20:22 [INFO] [ruFixDebug]:asdfghjkl;':
2011-10-14 19:20:22 [INFO] <Hiros> asdfghjkl;'
2011-10-14 19:20:26 [INFO] [ruFixDebug]:фывапролджэ:
2011-10-14 19:20:26 [INFO] <Hiros> фывапролджэ
2011-10-14 19:20:27 [INFO] IIWOLFII was killed by an angry Spider 
2011-10-14 19:20:27 [INFO] [HeroicDeath] IIWOLFII was killed by an angry Spider
2011-10-14 19:20:28 [INFO] Player Respawning
2011-10-14 19:20:31 [INFO] [ruFixDebug]:zxcvbnm,./:
2011-10-14 19:20:31 [INFO] <Hiros> zxcvbnm,./
2011-10-14 19:20:31 [INFO] Connection reset
2011-10-14 19:20:31 [INFO] IIWOLFII lost connection: disconnect.quitting
2011-10-14 19:20:32 [INFO] /31.23.104.246:2347 lost connection
2011-10-14 19:20:36 [INFO] [ruFixDebug]:ячсмитьбю.:
2011-10-14 19:20:36 [INFO] <Hiros> ячсмитьбю.
2011-10-14 19:20:38 [INFO] [ruFixDebug]:îê õâàòèò:
2011-10-14 19:20:38 [INFO] <Chief DaveDee> ок хватит

У товарища Убунта 10-ая
У нас Debian 6.0
В игре его видно как "CPPPCPCPC CPCPPC"
-DruFixConsole="UTF-8" -DruFixLogFile="UTF-8"
 
Какие параметра батника и версия плагина актуальна сейчас?
Пока отказался от ртулкита, будет достаточно рпосто руского чата в консоли стандартного батника с возможностью ввода команд
 
Какие параметра батника и версия плагина актуальна сейчас?
Пока отказался от ртулкита, будет достаточно рпосто руского чата в консоли стандартного батника с возможностью ввода команд
http://rubukkit.org/threads/rufix-исправление-русского-чата-в-windows.1224/page-9#post-19809
 
можно тоже самое без ruFix?
забавно. без руфикса я так понимаю всё работает отлично у пользователей линуксов
 
Проблемно немного но постараюсь чуть попозже.
Возможно в связке линукс-клиент и линукс-сервер замечательно друг друга понимают, тогда возможно есть способ отслеживать входящие сообщения по кодировке и не обрабатывать, если они изначально в утф?
 
обновлённая версия в первом сообщении
 
ок, ставлю на тест, но пока тел с линухой в зоне видимости не наблюдаю.
 
repeat,посмотрев на первое сообщения я подумал что этот один файлик может работать так и на windows так и на linux.Я правильно понял?
 
так по идеи или точно?

З.Ы Надо найти кого-нибудь на linux чтобы тестировать плагины
 
так по идеи или точно?

З.Ы Надо найти кого-нибудь на linux чтобы тестировать плагины
У меня линукс на сервере, макось (unix-like система, кстати) на клиенте. Макось отправляет серверу юникод, как и линукс.
Завтра весь день буду тестировать новую версию, о результатах отпишусь вечером.
 
2011-10-15 07:58:36 [INFO] [Sr. Admin] HeroBlood: СЏ, СЋ
2011-10-15 07:58:36 [WARNING] Failed to handle packet: java.lang.ArrayIndexOutOfBoundsException: 257
java.lang.ArrayIndexOutOfBoundsException: 257
at org.bukkit.craftbukkit.TextWrapper.wrapText(TextWrapper.java:65)
at net.minecraft.server.NetServerHandler.sendPacket(NetServerHandler.java:670)
at org.bukkit.craftbukkit.entity.CraftPlayer.sendRawMessage(CraftPlayer.java:118)
at org.bukkit.craftbukkit.entity.CraftPlayer.sendMessage(CraftPlayer.java:122)
at net.minecraft.server.NetServerHandler.chat(NetServerHandler.java:736)
at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:715)
at net.minecraft.server.Packet3Chat.a(Packet3Chat.java:33)
at net.minecraft.server.NetworkManager.b(NetworkManager.java:226)
at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:92)
at net.minecraft.server.NetworkListenThread.a(SourceFile:108)
at net.minecraft.server.MinecraftServer.h(MinecraftServer.java:471)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:374)
at net.minecraft.server.ThreadServerApplication.run(SourceFile:417)

Написал буквы я, ю и вылетело с этой ошибкой. Сервер не упал но в клиенте написано - Internal server error
В консоле видно буквы я,ю.
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх