Jump to content
  • 0

pomoc ASCII characters (logovanie chatu)


Danny

Dotaz

Čaute, dnes som sa pokúšal vytvoriť si takú základnú logovaciu pomôcku namiesto klasického server logu, ktorá by ukladala text, ktorý hráč napíše do chatu, do súboru. Keďže hráči používajú aj diakritiku, volil som takýto spôsob:

if(handle)
{
	for(new i = 0; i < sizeof(text); i++) fputchar(handle, text[i], false);
	fclose(handle);
}

1. Skontroloval som si, či je súbor korektne vytvorený a či doň môžem zapisovať.
2. Pomocou cyklu som prešiel všetky znaky uložené v stringu "text" ktorý drží samotný text, ktorý hráč napísal do chatu po stlačení klávesy T
3. Následne namiesto klasického fwrite, ktorý dokáže pracovať iba s kódovaním UTF-8, som použil funkciu fputchar, ktorej parameter "utf8" nastavený na false dokáže do súboru vložiť aj znaky v kódovaní ASCII
4. Znak po znaku som všetky zapísal a uzatvoril súbor

Funkciu som si otestoval na localhoste a všetko fungovalo presne tak, ako malo. V súbore sa mi ukazovali texty s diakritikou pekne za sebou tak, ako som ich v hre písal. No keď som to chcel vyskúšať s kamarátmi a server som nahodil na hosting, ktorý používa linux, tak namiesto znakov s diakritikou sa mi zobrazovali také tie čierne bloky s otáznikmi, ktoré značili, že znak nebol korektne prečítaný a nevedel byť teda printnutý.

Obracal som sa aj na podporu hostingu fakahedy, no vraj sa s týmto nedá nič robiť, keďže jadro je nastavené na kódovanie UTF-8. Existuje prosím vás nejaká možnosť, ako to viem ešte ináč vyriešiť? Chcem aby to bolo čo najjednoduchšie riešené, žiadne pluginy ani podobné veci, jedná sa iba o test. Verím, že veľa z vás s týmto má viac skúseností.

Vďaka za rady.

Link to comment
Share on other sites

5 odpovědí na tuto otázku

Recommended Posts

  • 1

Zkoušel jsem to jak to máš ty, též na fakahedě a špatně se to zobrazuje pouze v jejich správci souborů. Pokud ten soubor stáhnu a otevřu (v normálním poznámkovém bloku) tak se text zobrazuje normálně s diakritikou

Edited by DeLeTeCZ
Link to comment
Share on other sites

  • 0

Nazdar, práve som testoval na localhoste (Windows) a na fakahede (casa1, Linux) tento kód:

Spoiler

#define FILTERSCRIPT

#include <a_samp>

public OnFilterScriptInit()
{
    ChatlogWriteEASCII("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", "server_chatlog_eascii.txt");
    ChatlogWriteEASCII("áčďéěíĺľňóôŕřšťúůýžÁČĎÉĚÍĹĽŃÓÔŔŘŠŤÚŮÝŽ", "server_chatlog_eascii.txt");
    
    ChatlogWriteUTF8("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", "server_chatlog_utf8.txt");
    ChatlogWriteUTF8("áčďéěíĺľňóôŕřšťúůýžÁČĎÉĚÍĹĽŃÓÔŔŘŠŤÚŮÝŽ", "server_chatlog_utf8.txt");
    return 1;
}

ChatlogWriteEASCII(const text[], const path[])
{
    ChatlogWrite(text, path, false);
}

ChatlogWriteUTF8(const text[], const path[])
{
    ChatlogWrite(text, path, true);
}

ChatlogWrite(const text[], const path[], bool:utf8)
{
    new File:handle = fopen(path, io_append);
    if (handle)
    {
        for (new i = 0; text[i]; ++i)
        {
            fputchar(handle, text[i], utf8);
        }
        fputchar(handle, '\r', utf8);
        fputchar(handle, '\n', utf8);
        fclose(handle);
    }
    else
    {
        printf("Failed to open '%s' while logging: '%s'", path, text);
    }
}

 

V súbore server_chatlog_utf8.txt boli na obidvoch strojoch niektoré znaky zapísané nesprávne, ale v súbore server_chatlog_eascii.txt bolo na obidvoch strojoch všetko zapísané správne. Skús to možno tiež spustiť u seba a daj vedieť, aký si dostal výsledok. Ako píše Delete, skús výsledné súbory aj stiahnuť a pozrieť v inom editore.

Edited by DuFF
  • Paráda! (+1) 1
Link to comment
Share on other sites

  • 0

Po upravení skriptu podľa príkladu vyššie (veľká vďaka) sa mi to zobrazuje korektne aspoň vo Windowse po stiahnutí, resp. aj keď to otvorím vo FTP prehliadači. V tom hostingovom editore to však vyzerá ešte príšernejšie, ako predtým. Popravde sťahovanie tých logov do PC namiesto priameho otvárania je pre mňa veľký problém, nenapadá vás nejaké riešenie, ako by sa to dalo s hostingom odkomunikovať, alebo príp. spraviť niečo z mojej strany, aby sa mi to tak správne ako vo Windowse, zobrazovalo aj na Linuxe?

Edited by Danny
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...