Would you like to react to this message? Create an account in a few clicks or log in to continue.

GMS v117.2 日本語化

Go down

GMS v117.2 日本語化 Empty GMS v117.2 日本語化

投稿 by 構築さん 2016-09-28, 18:36

based MapleCrystal
Lithium base OK!!

tools.data.MaplePacketLittleEndianWriter.java

に追加

Code:
private static final Charset MS932 = Charset.forName("MS932");

変更後

Code:
public final void writeAsciiString(final String s) {
        write(s.getBytes(MS932));
    }

    public final void writeAsciiString(String s, final int max) {
        if (s.getBytes(MS932).length > max) {
            s = s.substring(0, max);
        }
        write(s.getBytes(MS932));
        for (int i = s.getBytes(MS932).length; i < max; i++) {
            write(0);
        }
    }

    public final void writeMapleAsciiString(final String s) {
        writeShort((short) s.getBytes(MS932).length);
        writeAsciiString(s);
    }

tools.data.LittleEndianAccessor.java

変更後

Code:
public final String readAsciiString(final int n) {
//char ret[] = new char[n];
        final byte ret[] = new byte[n];
        for (int x = 0; x < n; x++) {
            ret[x] = (byte) readByte();
        }
        try {
            String str = new String(ret, "MS932");
            return str;
        } catch (Exception e) {
            System.err.println(e);
        }
        return null;
    }

tools.StringUtil.java

追加

Code:
import java.nio.charset.Charset;
private static final Charset MS932 = Charset.forName("MS932");

RightとLeftで二箇所

変更後

Code:
for (int x = in.getBytes(MS932).length; x < length; x++) {

Linux環境では内部の文字コードがutf8なのでgetBytes()としてしまうとMS932とバイト数に差が出るためエラーが起きる。
getBytes(MS932)とすることで解決。
キャラクター名なども問題なく日本語が使えます。
構築さん
構築さん
Admin

Posts : 193
Join date : 2014/05/29

https://maplescience.forumjap.com

トップに戻る Go down

トップに戻る

- Similar topics

 
Permissions in this forum:
返信投稿: 不可