0

UDPJavaアプリケーションでByteBufferを受信して​​います。

これで、このByteBufferのデータは、任意の言語の任意の文字列、またはゼロで区切られた任意の特殊文字にすることができます。

次のコードを使用して、そこから文字列を取得します。

public String getString() {
byte[] remainingBytes = new byte[this.byteBuffer.remaining()];
this.byteBuffer.slice().get(remainingBytes);
String dataString = new String(remainingBytes);
int stringEnd = dataString.indexOf(0);

if(stringEnd == -1) {
    return null;
} else {
    dataString = dataString.substring(0, stringEnd);
    this.byteBuffer.position(this.byteBuffer.position() + dataString.getBytes().length + 1);

    return dataString;
}
}

これらの文字列は、すべてがUTF8として設定された状態でMySQLDBに保存されます。

Windowsでアプリケーションを実行すると、®などの特殊文字が表示されますが、中国語は表示されません。

VM引数を追加すると、-Dfile.encoding = UTF8中国語が表示されますが、®などの文字は??として表示されます。等

助けてください。

編集:

UDPパケットの入力文字列は、UTF-8でエンコードされ、0x00で終了する可変長バイトフィールドです。

JDBCの場合も、useUnicode = true&characterEncoding=UTF-8を使用します

4

2 に答える 2

0

確かではありませんが、stringEndは最初のゼロ位置に表示されますが、後ろには表示されないため、dataStringにはこのゼロまでのデータのみが含まれます。

dataString = dataString.substring(0、stringEnd + 1);

また

char specChar = dataString.substring(stringEnd、stringEnd + 1); 特殊文字のみを返す必要がありますが、bigginingで言ったように、わかりません...

于 2012-08-16T12:04:04.533 に答える
0

String dataString = new String(remainingBytes);間違っている。あなたはほとんど決してそれをするべきではありません。バイトをUDPパケットに入れるために使用されたエンコーディングを確認し、その行で同じエンコーディングを使用する必要があります。

String dataString = new String(remainingBytes, encoding); // e.g. "UTF-8"

encoding編集:更新された質問に基づいて、"UTF-8"

于 2012-08-16T12:06:05.580 に答える