我正在尝试读取一个投掷字符串的网址。我将该字符串存储在某个变量中,并尝试使用jsp在我的网页上打印该变量。当我在我的网页上打印我的字符串时,它会给出一些垃圾字符。我怎样才能得到原始字符串?
这是我的jsp代码:
Market.jsp
<%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%
URL url;
ArrayList<String> list1 = new ArrayList<String>();
ArrayList<String> list2 = new ArrayList<String>();
List commodity1 = null;
List price1 = null;
int c, p = 0;
try {
// get URL content
String a = "http://122.160.81.37:8080/mandim/MarketWise?m=agra";
url = new URL(a);
URLConnection conn = url.openConnection();
// open the stream and put it into BufferedReader
BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
StringBuffer sb = new StringBuffer();
String inputLine;
while ((inputLine = br.readLine()) != null) {
System.out.println(inputLine);
// sb.append(inputLine);
String s = inputLine.replace("|", "\n");
s = s.replace("~", " ");
StringTokenizer str = new StringTokenizer(s);
while (str.hasMoreTokens())
{
String mandi = str.nextElement().toString();
String price = str.nextElement().toString();
list1.add(mandi);
list2.add(price);
}
}
commodity1 = list1.subList(0, 10);
// commodity10=list1.subList(90,100);
price1 = list2.subList(0, 10);
int c1 = 0;
int p1 = 0;
for (c1 = 0, p1 = 0; c1 < commodity1.size() && p1 < price1.size(); c1++, p1++) {
String x = (String) commodity1.get(c1);
String y = (String) price1.get(p1);
out.println(x);
out.println(y);
}
br.close();
//System.out.println(sb);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
%>
</body>
</html>
我收到以下输出
धान 1325 चावल 2050 ज�वर 920 जौ 810 मकई 1280 गेहू� 1420 जो 1050 बेजर - जय 800 उड़द 3600
我怎样才能达到预期的目标?
提前致谢
答案 0 :(得分:0)
我认为这是您系统上的编码问题。我不知道JSP足以告诉你什么,但是当你在linux上运行代码作为纯java应用程序并将out.println();
更改为System.out.println();
时,我可以看到输出符合预期。 (侧节点:产品名称是亚洲名称,所以不要像我一样惊讶。在这种情况下,预期字符与我对URL进行wget调用时的字符相同)。
这意味着:您的代码很好:它可以加载您想要的内容。问题是演示文稿。 HTML页面有自己的编码。我猜JSP是透明的( - &gt;这里我需要外部输入如何做到这一点),但结果必须有这三个解决方案中的一个:
℘
或℘
无论您选择使用什么:您的输出必须与格式匹配。这也意味着您的代码需要知道所选的字符集。而且我确信JSP确实如此。如果要使用默认实现的编码,则需要为此找到一个函数。看看Escape all strings in JSP/Spring MVC。这不会太难。
只有当你真的疯了但不知道怎么做时,请使用类似的东西(这是一个黑客!)函数来编码你的字符串:
private String encode(String str) {
StringBuilder sb = new StringBuilder();
for (char ch : str.toCharArray())
if (ch < 128)
sb.append(ch);
else {
sb.append("&#x");
String hx = Integer.toHexString(ch);
while (hx.length() < 4)
hx = "0" + hx;
sb.append(hx);
sb.append(";");
}
return sb.toString();
}