java中垃圾字符的去除
在文本字段中,若我从word复制,将插入垃圾字符。虽然从jsp页面发布参数,但仍然可以。但是,在java中获取参数时,它会转换为垃圾。在插入之前,我使用了以下代码来消除垃圾。我正在使用mysql数据库。(JBOSS 5.1 GA服务器) 但我仍然得到单引号(“”)和双引号(“”)的垃圾字符。我需要UTF-8格式的字符串。有人能告诉我哪里错了吗 示例:输入-“esgh”。 输出–esgh??: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
想要输出-“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();