java中的垃圾字符删除

9 java mysql string utf-8

在文本字段中如果我从单词复制,则插入垃圾字符.从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();
}
Run Code Online (Sandbox Code Playgroud)

但我仍然在单引号('')和双引号("")中获得垃圾字符.我需要UTF-8中的字符串.任何人都可以建议我可能错在哪里?

示例:输入 - "esgh".输出 - â??esghâ??:想要输出 - "esgh".

Mar*_*aux 5

你必须交换编码和解码调用.加; 你正在解码两次,只有一个编码!

你写了:

CharBuffer cbuf = decoder.decode(ByteBuffer.wrap(bufferToConvert));
ByteBuffer bbuf = encoder.encode(CharBuffer.wrap(cbuf));
userText = decoder.decode(bbuf).toString();
Run Code Online (Sandbox Code Playgroud)

但是,显然,它必须是:

ByteBuffer bbuf = encoder.encode(CharBuffer.wrap(userText));
CharBuffer cbuf = decoder.decode(bbuf);
userText = cbuf.toString();
Run Code Online (Sandbox Code Playgroud)

首先,您必须对文本进行编码,然后对编码结果进行解码.

  • 你想在这里实现什么?如果编码器是平台默认值(例如,ISO-8859-1)并且解码器是UTF-8,那么您的解决方案肯定会破坏文本.如果你很幸运,平台默认为UTF-8,这绝对不会做任何事情. (2认同)