java中的垃圾字符删除

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中的垃圾字符删除相关的知识,希望对你有一定的参考价值。

在文本字段中如果我从单词复制,则插入垃圾字符。从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”。

答案

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

你写了:

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

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

另一答案

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

另一答案

Martijn Courteaux的答案应该会给你预期的输出。但是一旦尝试使用服务器设置CHARACTERCOLLATION。设置为UTF-8

我希望它能奏效。

另一答案

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

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

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

以上是关于java中的垃圾字符删除的主要内容,如果未能解决你的问题,请参考以下文章

XSS:如何从 C# 中的字符串中删除 JS 片段?

将代码提交到SVN存储库后,垃圾字符会自动更改

在文本中找到垃圾字符

web开发性能优化---SEO优化篇

Java 垃圾回收 - 收集算法

将字符串 XML 片段转换为 Java 中的文档节点