如何在BufferReader进程解码并显示特殊字符后取回URLEncoded功能?

时间:2014-11-23 02:54:17

标签: java bufferedreader urlencode stringescapeutils

网页网址为“//host:port/abc/testr-email.html?ans1=NÃO&ans2=NÃO&ans3=NÃO&ans4=SIM&ans5=NÃO&cntr=1&ts=5&pname=TAAA”  使用 URLEncoder.encode(字符串,“UTF-8”)后,页面路径上的变为如下所示,特殊字符转义/编码。

pagepath = "//host:port/abc/testr-email.html?ans1=N%C3%83O&ans2=N%C3%83O&ans3=N%C3%83O&ans4=SIM&ans5=N%C3%83O&counter=1&totalquestions=5&participantname=TAAA"

以下是我的代码片段,其中我试图读取页面内容有一些特殊字符值为“NÃO”,在缓冲区读取器进程解码后丢失其编码功能并获取发送的值它是一个电子邮件正文。

代码段:

url = new URL(pagepath);
 URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());            
            url = uri.toURL();
            URLConnection conn = url.openConnection(); 
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
            String inputLine;
            StringBuilder content = new StringBuilder();
            while ((inputLine = br.readLine()) != null) {               
                byte[] byte1 = inputLine.getBytes("UTF-8");
                String sample=new String(byte1, "UTF-8");
                log.info("sample Content ==>" + StringEscapeUtils.unescapeHtml4(sample));
                content.append(sample);

Where the content is an a StringBuilder as below            


StringBuilder content = new StringBuilder();

和BufferedReader之后的内容丢失了URLEncoded功能,将我的特殊字符转换回Decode并将其用于电子邮件。

String tempstring = StringEscapeUtils.unescapeHtml4(content.toString());
                email.setHtmlMsg(tempstring);

我正在观察email.setHtmlMsg(...)。没有我的“NÃO”特殊字符,它已将字符转义为“ N%C3%83O ”。
如何取回特殊字符并将其发送到发送电子邮件功能中的HTML邮件正文。 ?

1 个答案:

答案 0 :(得分:0)

使用URLDecoder从编码字符串中获取特殊字符。请尝试以下声明。

URLDecoder.decode("N%C3%83O", "UTF-8")