当前位置: 首页 > 知识库问答 >
问题:

JSP服务输出到UTF-8

黄景胜
2023-03-14

有一个有趣的问题。。我们的防火墙后面有一个wordpress XML/RSS服务,该服务本地化到多个国家,可以与中文、俄文等完美结合。

为了公开这个服务,我们创建了一个简单的JSP服务,由于某些原因,它不会呈现外来字符。

任何想法都将不胜感激。

<%@ page language="java" contentType="application/xml; charset=utf-8" pageEncoding="utf-8"%>
<%@ page session="false"%>
<%@ page import='java.io.BufferedReader' %> 
<%@ page import='java.io.InputStreamReader' %> 
<%@ page import='java.io.IOException' %> 
<%@ page import='java.io.PrintWriter' %> 
<%@ page import='java.net.URL' %> 
<%@ page import='java.net.URLConnection' %> 

<%

//final String URL_BASE = "http://localhost:8080/index.php/";
final String URL_BASE = "http://INTERNALSERVERIP:8888/index.php/";
final String NL = System.getProperty("line.separator");

BufferedReader br = null;
try
{
    String feedName = request.getParameter("name");

    // if no feed was specified
    if (feedName == null || feedName.trim().length() == 0)
    {
        feedName = "feed1";
    }

    // set the URL based off the feed name
    String urlStr = URL_BASE + feedName.trim().toLowerCase();
    System.out.println("urlStr: " + urlStr);

    URL url = new URL(urlStr);
    URLConnection urlCon = url.openConnection();

    br = new BufferedReader(new InputStreamReader(urlCon.getInputStream()));

    String resLine = null;
    while ((resLine = br.readLine()) != null) 
    {
        resLine= new String(resLine.getBytes("ISO8859_1"), "UTF8");  
        out.println(resLine);
    }
}
catch (Throwable t)
{
    t.printStackTrace(new PrintWriter(out));
}
finally
{
    if (br != null)
    {
        try
        {
            br.close();
        }
        catch (IOException ioe)
        {}
    }
}
%>

共有1个答案

田志尚
2023-03-14

按照Jasper de Vries的建议,使用UTF8字符集创建InputStreamReader(如下所示)。

br = new BufferedReader(new InputStreamReader(urlCon.getInputStream(), "UTF8"));

然后,您不需要在循环中转换字符串的字符集,因此可以删除/注释它。下面是jsp的修改版本。

<%@ page language="java" contentType="application/xml; charset=utf-8" pageEncoding="utf-8"%>
<%@ page session="false"%>
<%@ page import='java.io.BufferedReader' %> 
<%@ page import='java.io.InputStreamReader' %> 
<%@ page import='java.io.IOException' %> 
<%@ page import='java.io.PrintWriter' %> 
<%@ page import='java.net.URL' %> 
<%@ page import='java.net.URLConnection' %> 

<%

//final String URL_BASE = "http://localhost:8080/index.php/";
final String URL_BASE = "http://INTERNALSERVERIP:8888/index.php/";
final String NL = System.getProperty("line.separator");

BufferedReader br = null;
try
{
    String feedName = request.getParameter("name");

    // if no feed was specified
    if (feedName == null || feedName.trim().length() == 0)
    {
        feedName = "feed1";
    }

    // set the URL based off the feed name
    String urlStr = URL_BASE + feedName.trim().toLowerCase();
    System.out.println("urlStr: " + urlStr);

    URL url = new URL(urlStr);
    URLConnection urlCon = url.openConnection();

    br = new BufferedReader(new InputStreamReader(urlCon.getInputStream(), "UTF8"));

    String resLine = null;
    while ((resLine = br.readLine()) != null) 
    {
        // resLine= new String(resLine.getBytes("ISO8859_1"), "UTF8");  
        out.println(resLine);
    }
}
catch (Throwable t)
{
    t.printStackTrace(new PrintWriter(out));
}
finally
{
    if (br != null)
    {
        try
        {
            br.close();
        }
        catch (IOException ioe)
        {}
    }
}
%>

希望有帮助。:)

 类似资料:
  • 编写了以下两个函数,用于存储和检索任何Python(内置或用户定义)对象,并结合使用json和jsonickle(在2.7中) 我还没有用用户定义的对象测试过这两个函数,但是当我试图保存()一个内置的字符串字典时,(即。{'Adam': 'Age 19 ',' Bill ',' Age 32'}),并且我检索相同的文件,我得到相同的unicode字典,{u'Adam': u'Age 19 ',u'

  • 我需要根据以下场景格式化restful服务的输出(xml) 我有一个键值对如下的类。 假设我有这样的列表,由rest服务返回: 我想生成如下输出 但目前它提供了以下输出 有人能告诉我如何做到这一点吗?

  • 到处玩弄Spring Boot,我无法显示jsp页面。有daos等工作,所以没有probs那里,但我不能为我的生活使它显示一个简单的jsp页面(没有数据传入,只是一个简单的页面) 我尝试在/resources/meta-inf/resources/WEB-INF/jsp和/webapp/WEB-INF/view中添加JSP 误差

  • Response响应对象主要将JSP容器处理后的结果传回到客户端。可以通过response变量设置HTTP的状态和向客户端发送数据,如Cookie、HTTP文件头信息等。 一个典型的响应看起来就像下面这样: HTTP/1.1 200 OK Content-Type: text/html Header2: ... ... HeaderN: ... (空行) <!doctype ...> <ht

  • 问题:基于PersonDto中存在的规则值,我正在应用这些规则。在Rule1类中,我有一个修改id字段的逻辑。我正在设置新的id,我得到作为参数。 最后,我将结果存储到ArrayList中。 但是在ArrayList中,所有PersonDto的值都是我在应用规则时传递的最后一个id值。 例如: 正如您在上面的代码片段中所看到的,有两个ID10001和10002,但是当存储并打印结果时,所有元素中的

  • 请查看Servlet类中的注释。如果将更改为,则无法访问应用程序。 为什么会出现这个问题?