Ja, also grundsätzlich bist du bisschen auf dem Holzweg mit UTF-8. UTF-8 ist eine multi-byte Enkodierung, welche alle Unicode Zeichen unterstützt, das sind ganz viele an der Zahl.
Damit wirst du aber in Metin wenig anfangen können, weil C++ unter Windows und Multibyte nicht die besten Freunde sind. Es bedeutet, dass die Zeichen nach dem 128. Zeichen aus der Kombination von mehreren Bytes bestehen, also ist ein String der 30 Bytes lang ist, nicht auch immer 30 Zeichen lang.
Metin2 arbeitet hingegen im westlichen Raum mit Codepages, die mit Abstand bekannteste ist windows1252. Und dient als Codepage für den westeuropäischen Raum. Diese sind immer ein Zeichen per Byte.
Codepages unterstützen nur 256 Zeichen, sind wie UTF-8 auch ASCII kompatibel, was bedeutet, dass die ersten 128 Zeichen von der Stell 0 bis 127 gleich sind. Die Zeichen von 128 bis 255 können variieren ähneln sich aber auch sehr stark.
Ein wichtiger Punkt den du über Codepages wissen musst, sie sind nicht enkodiert, dass bedeutet, jedes einzelne Zeichen steht genauso da wie's dasteht, keine Zusatzinformationen. Das bedeutet, man kann nicht wissen was für eine Codepage man vor sich hat. Es kann ANSI windows1252 sein, es kann aber auch ISO latin1 sein, die sich sehr stark ähneln, aber nicht exakt gleich sind. Wenn du einen Text bekommst der nur ASCII Zeichen beinhaltet wie "A-Za-z0-9+-{}[]/()" etc. ist es unmöglich nachzuvollziehen, was der Absender des Textes für eine Codepage hatte, wenn diese Information nicht zusätzlich übergeben wird.
Ein "?" entsteht, dann wenn eine Codepage an der Stelle kein Zeichen kennt. Ergo nicht alle Stellen der 255 möglichen Stellen sind belegt mit Zeichen.
Es gibt zu jeder Codepage einen Wikipedia-Eintrag, den du dir ansehen solltest, hier z. B. windows1252:
Deutsch: Bitte melden Sie sich an, um diesen Link zu sehen.
Türkisch: Bitte melden Sie sich an, um diesen Link zu sehen.
etc.
Nun zu deiner eigentlichen Frage, was hilft dir das jetzt?
Du musst wissen:
- MYSQL verwendet latin1 in Metin2, welches sich sehr der windows1252 ähnelt, aber nicht ganz deckungsgleich ist.
- Deine Codedateien solltest du immer in windows1252 öffnen und nur ASCII Zeichen verwenden, wenn möglich.
- Deine restlichen Sprachdateien musst du in der jeweiligen Codepage öffnen, dies kannst nur du wissen, dein Editor weiss nicht was er da öffnet und du musst ihm (wenn er nicht intelligent ist) jedesmal sagen, interpretiere die türkische Datei als windows1254 Codepage.
- In deinem Code, musst du angeben, wenn du die Codepages lädst, dass diese mit der Codepage windows1254 interpretiert werden muss, wenn es eine türkische Datei ist, das kann dein Metin2 Code nämlich genauso wenig wissen.
- Dem Client musst du ebenfalls sagen, was er als was interpretieren muss. Und welche Nachricht deutsch ist und welche türkisch etc..
Wenn du weitere Fragen hast, einfach stellen.