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

您必须交换编码和解码调用。加; 您要解码两次,仅一次编码!

你写了:

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)andString#String(byte[],Charset)进行转换,不需要在这个级别上搞乱缓冲区。

于 2012-08-05T21:59:48.720 回答
0

Martijn Courteaux 的回答应该会给你预期的输出。但是一旦尝试使用服务器设置CHARACTER并将COLLATION.Set 设置为UTF-8.

我希望它会奏效。

于 2012-07-30T13:04:08.007 回答
0

请检查网络/应用程序服务器是否正在发送正确的数据。

您使用的是哪个 Web/应用程序服务器?

您使用的是简单的文本字段还是其他?

于 2012-08-04T16:20:32.730 回答