9

word からコピーすると、テキスト フィールドにジャンク文字が挿入されます。jspページからパラメータを投稿している間は問題ありません。しかし、Javaでパラメーターを取得している間、それはジャンクに変換されます。次のコードを使用して、挿入前にジャンクを排除しました。私はmysqlデータベースを使用しています。(JBOSS 5.1 GA サーバー)

String outputEncoding = "UTF-8";

Charset charsetOutput = Charset.forName(outputEncoding);
CharsetEncoder encoder = charsetOutput.newEncoder();
byte[] bufferToConvert = userText.getBytes();
CharsetDecoder decoder =  (CharsetDecoder) charsetOutput.newDecoder();
try {
    CharBuffer cbuf = decoder.decode(ByteBuffer.wrap(bufferToConvert));
    ByteBuffer bbuf = encoder.encode(CharBuffer.wrap(cbuf));
    userText = decoder.decode(bbuf).toString();
} catch (CharacterCodingException e) {
    e.printStackTrace();
}

しかし、私はまだ一重引用符('')と二重引用符("")のジャンク文字を取得しています。UTF-8 の文字列が必要です。誰かが私が間違っているかもしれない場所を提案できますか?

例: 入力 -"esgh". 出力 - â??esghâ?? : 希望する出力 - "esgh".

4

4 に答える 4

5

エンコード呼び出しとデコード呼び出しを入れ替える必要があります。プラス; 1つのエンコーディングだけで2回デコードしています!

あなたが書いた:

CharBuffer cbuf = decoder.decode(ByteBuffer.wrap(bufferToConvert));
ByteBuffer bbuf = encoder.encode(CharBuffer.wrap(cbuf));
userText = decoder.decode(bbuf).toString();

しかし、明らかに、それは次のようにする必要があります。

ByteBuffer bbuf = encoder.encode(CharBuffer.wrap(userText));
CharBuffer cbuf = decoder.decode(bbuf);
userText = cbuf.toString();

まず、テキストをエンコードしてから、エンコードされた結果をデコードする必要があります。

于 2012-07-24T10:32:19.633 に答える
1

Microsoft Word からテキストをコピーすると、「スマート クォート」機能があり、エンコード/デコード時につまずくことがあります。Windows-1252ソース エンコーディングとしてエンコーディングを使用してみてください。String#getBytes(String)また、変換にandを使用することをお勧めしString#String(byte[],Charset)ます。このレベルでバッファをいじる必要はありません。

于 2012-08-05T21:59:48.720 に答える
0

Martijn Courteauxによる回答は、期待される成果をもたらすはずです。ただし、サーバーのセットアップCHARACTERCOLLATION.Setを。に設定してみてくださいUTF-8

私はそれがうまくいくことを願っています。

于 2012-07-30T13:04:08.007 に答える
0

Web/アプリケーション サーバーが正しいデータを送信しているかどうかを確認してください。

どの Web/アプリケーション サーバーを使用していますか?

単純なテキスト フィールドを使用していますか、それとも他のフィールドを使用していますか?

于 2012-08-04T16:20:32.730 に答える