java中垃圾字符的去除

java中垃圾字符的去除,java,mysql,string,utf-8,Java,Mysql,String,Utf 8,在文本字段中,若我从word复制,将插入垃圾字符。虽然从jsp页面发布参数,但仍然可以。但是,在java中获取参数时,它会转换为垃圾。在插入之前,我使用了以下代码来消除垃圾。我正在使用mysql数据库。(JBOSS 5.1 GA服务器) 但我仍然得到单引号(“”)和双引号(“”)的垃圾字符。我需要UTF-8格式的字符串。有人能告诉我哪里错了吗 示例:输入-“esgh”。 输出–esgh??: 想要输出-“esgh”。您必须交换编码和解码调用正;您解码了两次,只进行了一次编码 你写道: CharB

在文本字段中,若我从word复制,将插入垃圾字符。虽然从jsp页面发布参数,但仍然可以。但是,在java中获取参数时,它会转换为垃圾。在插入之前,我使用了以下代码来消除垃圾。我正在使用mysql数据库。(JBOSS 5.1 GA服务器)

但我仍然得到单引号(“”)和双引号(“”)的垃圾字符。我需要UTF-8格式的字符串。有人能告诉我哪里错了吗

示例:输入-“esgh”。 输出–esgh??:
想要输出-“esgh”。

您必须交换编码和解码调用<强>正;您解码了两次,只进行了一次编码

你写道:

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();

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

Martijn Courtaux的答案应该会给出预期的输出。但一旦尝试使用服务器设置
字符
排序规则
。设置为
UTF-8


我希望它能工作。

请检查web/application server是否发送了正确的数据

您正在使用哪个web/应用程序服务器


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

如果您从Microsoft Word复制文本,它具有“智能引号”功能,有时在编码/解码时可能会出错。尝试使用编码
Windows-1252
作为源编码。另外,我建议使用
String#getBytes(String)
String#String(byte[],Charset)
进行转换,不需要在这个级别上处理缓冲区。

您能给出一些输入和想要的输出的示例吗?我已经给出了一个示例。但单引号也会发生这种情况。难道你不能只按ASCII值过滤吗?只要取大于31小于128的所有值即可。您的
inputDecoder
变量未在代码示例中使用。这是故意的还是错误的?我原以为您会获得此输入字符类型的
字符集
实例,并使用该实例而不是从输出字符集获得的解码器。@DuncanJones它没有任何区别。不管怎样,我在尝试别的东西。所以贴错了。但是编码方法不适用于ByteBuffer参数。它抛出错误。哦,是的,你是对的。交换缓冲区。查看我编辑的答案。谢谢你的努力。但它仍然不能清除垃圾。我得到了和以前一样的结果。你在这里想要达到什么?如果编码器是平台默认值(比如ISO-8859-1),而解码器是UTF-8,那么您的解决方案肯定会破坏文本。如果幸运的话,平台的默认值是UTF-8,这绝对不会起任何作用。
ByteBuffer bbuf = encoder.encode(CharBuffer.wrap(userText));
CharBuffer cbuf = decoder.decode(bbuf);
userText = cbuf.toString();