一群面人,这么个问题都没人回答

yycathryn 2002-03-15 10:18:33
网上下载了一个生成Jpeg图片的Servlet,
生成的图片中包含中文。
不能正确显示中文,只要是中文统统显示乱码。
用resin发布的。

已经反编译了取得源码,然后重新编译,仍然不行。

package com.objectplanet.chart;

import com.objectplanet.chart.jpeg.JpegEncoder;
import java.awt.*;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.StringTokenizer;
import javax.servlet.*;

// Referenced classes of package com.objectplanet.chart:
// ChartApplet, Chart, BarChartApplet, LineChartApplet,
// PieChartApplet

public class ChartServlet extends GenericServlet
{

public String encodeChartImage(Image image, OutputStream outputstream)
throws IOException
{
if(image != null && outputstream != null)
{
JpegEncoder jpegencoder = new JpegEncoder(image, 75, outputstream);
jpegencoder.Compress();
outputstream.flush();
}
return "image/jpeg";
}

public ChartServlet()
{
}

private final boolean hasValidLicense()
{
return true;
}

protected static Double[] getDoubleValues(String s)
{
Double adouble[] = null;
if(s != null && !s.equals(""))
{
StringTokenizer stringtokenizer = new StringTokenizer(s, ",");
adouble = new Double[stringtokenizer.countTokens()];
for(int i = 0; i < adouble.length; i++)
try
{
adouble[i] = new Double(stringtokenizer.nextToken());
}
catch(NumberFormatException _ex) { }

}
return adouble;
}

public synchronized void service(ServletRequest servletrequest, ServletResponse servletresponse)
throws ServletException, IOException
{
Object obj = null;
String s = servletrequest.getParameter("chart");
s = s == null ? "bar" : s;
if(s.equals("bar"))
obj = barChart;
else
if(s.equals("line"))
obj = lineChart;
else
if(s.equals("pie"))
obj = pieChart;
if(obj == null)
return;
((ChartApplet) (obj)).theChart.setSize(300, 200);
((ChartApplet) (obj)).reset();
((ChartApplet) (obj)).setParameter("seriesCount", servletrequest.getParameter("seriesCount"));
String s1 = servletrequest.getParameter("sampleCount");
if(s1 == null || s1.trim().length() == 0)
{
Double adouble[] = getDoubleValues(servletrequest.getParameter("sampleValues"));
int i = adouble == null ? 0 : adouble.length;
int j = ((ChartApplet) (obj)).theChart.getSeriesCount();
for(int k = 0; k < j; k++)
{
Double adouble1[] = getDoubleValues(servletrequest.getParameter("sampleValues_" + k));
i = adouble1 == null ? i : Math.max(i, adouble1.length);
}

((ChartApplet) (obj)).setParameter("sampleCount", i + "");
} else
{
((ChartApplet) (obj)).setParameter("sampleCount", s1);
}
String s2;
String s3;
for(Enumeration enumeration = servletrequest.getParameterNames(); enumeration.hasMoreElements(); ((ChartApplet) (obj)).setParameter(s2, s3))
{
s2 = (String)enumeration.nextElement();
s3 = servletrequest.getParameter(s2);
}

((ChartApplet) (obj)).setParameter("rangeStep", servletrequest.getParameter("rangeStep"));
((ChartApplet) (obj)).setParameter("range", servletrequest.getParameter("range"));
((ChartApplet) (obj)).setParameter("lowerRange", servletrequest.getParameter("lowerRange"));
((ChartApplet) (obj)).setParameter("rangeStep_2", servletrequest.getParameter("rangeStep_2"));
((ChartApplet) (obj)).setParameter("range_2", servletrequest.getParameter("range_2"));
((ChartApplet) (obj)).setParameter("lowerRange_2", servletrequest.getParameter("lowerRange_2"));
Dimension dimension = ((ChartApplet) (obj)).theChart.getSize();
Image image = ((ChartApplet) (obj)).theChart.getImage(dimension.width, dimension.height);
if(!hasValidLicense())
{
Graphics g = image.getGraphics();
g.setColor(Color.white);
g.fillRect(0, dimension.height - 8, dimension.width, 8);
g.setColor(Color.gray);
g.setFont(new Font("Arial", 0, 9));
g.drawString("www.objectplanet.com www.objectplanet.com www.objectplanet.com www.objectplanet.com www.objectplanet.com", 0, dimension.height - 2);
}

String s4 = encodeChartImage(image,servletresponse.getOutputStream());
if(s4 != null && s4.length() > 0)
{

servletresponse.setContentType(s4);
}
else
{
servletresponse.setContentType("image");
}
}

public void init(ServletConfig servletconfig)
{
try
{
super.init(servletconfig);
}
catch(ServletException _ex) { }
barChart = new BarChartApplet();
lineChart = new LineChartApplet();
pieChart = new PieChartApplet();
barChart.init();
lineChart.init();
pieChart.init();
}

protected BarChartApplet barChart;
protected LineChartApplet lineChart;
protected PieChartApplet pieChart;
}

...全文
55 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zfluo 2002-03-15
  • 打赏
  • 举报
回复
不用去判断流中那一部分是汉字,原理是一样的,
是你自己还没有真正的去领会servlet会出现中文问题
的根源,多看一下,多试一下,肯定可以找到解决方法的。
yycathryn 2002-03-15
  • 打赏
  • 举报
回复
你的主页地址是什么
banq 2002-03-15
  • 打赏
  • 举报
回复
这是操作系统的操作问题
我主页上的'图文动态结合'也谈到这个问题.
我的代码没这么复杂,使用jdk1.4的新功能
如果对你有用.别忘记给分
yycathryn 2002-03-15
  • 打赏
  • 举报
回复
那我如何判断流中哪一部分是汉字呢?
microflora 2002-03-15
  • 打赏
  • 举报
回复
那就去解决字节流(byte)和字符(char)之间的转换问题吧!
yycathryn 2002-03-15
  • 打赏
  • 举报
回复
已经找过,其他的中文问题是字符串处理
而现在是图片上的中文是流文件
zfluo 2002-03-15
  • 打赏
  • 举报
回复
自己不会去找答案,还在这里大言不惭,
有关servlet的中文问题的讨论已经很多了,
而且也已经很详细,不是别人不会,对于
那些好吃懒做,遇到问题连想一下都不肯的,
大家是根本不屑于回答的。你不会问问题,
就先看一下本版的头条——提问的智慧,
答案就在眼前,然而却不会去寻找,可悲!
可怜!
yycathryn 2002-03-15
  • 打赏
  • 举报
回复
不服就帮我解决它??
vive 2002-03-15
  • 打赏
  • 举报
回复
你去死吧,呵呵

23,407

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧