jsp程序乱码的问题

Frisk 2004-11-22 10:33:48
我写了一个写文件的类,在下边运行的好好的。(写到文件中的汉字是程序产生的,不是数据库的)
但是通过jsp调用此类时(在WEB上使用此类)写到文件中的 都是乱码!

??
...全文
218 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Frisk 2004-11-22
  • 打赏
  • 举报
回复
结果却是这样;

IP??? ??? ???????? ??????? ??????? ??????? ???????? ???????


1 ????2 ????3 ????4 ????5 ????6 ????

1 ????2 ????3 ????4 ????5 ????6 ????

1 ????2 ????3 ????4 ????5 ????6 ????
Frisk 2004-11-22
  • 打赏
  • 举报
回复
都不行啊,还是乱码!

register(); // 初始化环境

writer.write("\n\n");
writer.write(new String("1 测试".getBytes(), "ISO-8859-1"));
writer.write(new String("2 测试".getBytes("ISO-8859-1")));
writer.write(new String("3 测试".getBytes("ISO-8859-1"), "ISO-8859-1"));
writer.write(new String("4 测试".getBytes("ISO-8859-1"), "GB2312"));
writer.write(new String("5 测试".getBytes("ISO-8859-1"), "GBK"));
writer.write(new String("6 测试".getBytes()));

writer.write("\n\n");
writer.write(new String("1 测试".getBytes(), "GB2312"));
writer.write(new String("2 测试".getBytes("GB2312")));
writer.write(new String("3 测试".getBytes("GB2312"), "GB2312"));
writer.write(new String("4 测试".getBytes("GB2312"), "ISO-8859-1"));
writer.write(new String("5 测试".getBytes("GB2312"), "GBK"));
writer.write(new String("6 测试".getBytes()));

writer.write("\n\n");
writer.write(new String("1 测试".getBytes(), "GBK"));
writer.write(new String("2 测试".getBytes("GBK")));
writer.write(new String("3 测试".getBytes("GBK"), "GBK"));
writer.write(new String("4 测试".getBytes("GBK"), "GB2312"));
writer.write(new String("5 测试".getBytes("GBK"), "ISO-8859-1"));
writer.write(new String("6 测试".getBytes()));
kingmaxno1 2004-11-22
  • 打赏
  • 举报
回复
楼主还是看一下javaapi的文档吧,
调用基于汉字的编码要用
Reader类来读,用Writer类来写
jFresH_MaN 2004-11-22
  • 打赏
  • 举报
回复
编码问题的帖子很多的
你搜一下
你用这个试试
String str = new String("姓名,年龄".getBytes("ios8859-1"),"gb2312");
outputStream.write(str.getBytes());
lijunjiejava 2004-11-22
  • 打赏
  • 举报
回复
outputStream.write(str.getBytes("gb2312"));
Frisk 2004-11-22
  • 打赏
  • 举报
回复
我加了这句<%@ page contentType="text/html;charset=gb2312"%>

但是不行。
我的类大致是这样写的,
String str = "姓名,年龄";
outputStream.write(str.getBytes());
;
使用dos命令符就是好的,在WEB上用jsp掉(javabean)就是乱码。现在的问题是写道文件中的都是乱码
drugon 2004-11-22
  • 打赏
  • 举报
回复
在页面上加上这一句就可以了。
<%@ page contentType="text/html;charset=gb2312"%>
冬羿 2004-11-22
  • 打赏
  • 举报
回复
你的jsp页面的字符集和你的发布平台字符集要一样。
guishuanglin 2004-11-22
  • 打赏
  • 举报
回复
强制转变法:
InputStream is = mySocket.getInputStream();
InputStreamReader reader = new InputStreamReader(is, "MS950");
========用JSP进行转换============
<%@ page contentType="text/html; charset=gb2312"%>
<%@ page import="java.io.*"%>
<%! String trans(String chi)
{
String result = null;
byte temp [];
try
{
temp=chi.getBytes("iso-8859-1");//这里你可以改你要的编码名
result = new String(temp);
}
catch(UnsupportedEncodingException e)
{
System.out.println (e.toString());
}
return result;
}
%>
<%
out.println(trans(request.getParameter("name")));
%>
foodeat 2004-11-22
  • 打赏
  • 举报
回复
<%@ page contentType="text/html; charset=Big5"%>
guishuanglin 2004-11-22
  • 打赏
  • 举报
回复
<%@ page contentType="text/plain;charset=UTF-8" import="java.io.*,java.text.*,java.util.*,javax.servlet.jsp.*"%>
<html>
<body>
<%!
Locale locale;
DateFormat format;
JspWriter writer;
%>
<%!
//英语
void processEnglish()throws Exception
{
locale=new Locale("en","US");
format=DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG,locale);
writer.println("in English:");
writer.println("<br>");
writer.println("HelloWorld!");
writer.println(format.format(new Date()));
writer.flush();
}
//中文
void processChinese()throws Exception
{
locale=new Locale("zh","");
format=DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG,locale);
writer.println("in Chinese:");
writer.println("<br>");
writer.println("\u4f60\u597d\u4e16\u754c");
writer.println(format.format(new Date()));
writer.flush();
}
//韩国语
void processKorean()throws Exception
{
locale=new Locale("ko","");
format=DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG,locale);
writer.println("in Korean:");
writer.println("<br>");
writer.println("\uc548\ud558\uc138\uc694\uc138\uacc4");
writer.println(format.format(new Date()));
writer.flush();
}
//俄语
void processRussian()throws Exception
{
locale=new Locale("ru","");
format=DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG,locale);
writer.println("in Russian:");
writer.println("<br>");
writer.println("\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439,\u041c\u0438\u0440");
writer.println(format.format(new Date()));
writer.flush();
}
//西班牙语
void processSpanish()throws Exception
{
locale=new Locale("es","");
format=DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG,locale);
writer.println("in Spanish:");
writer.println("<br>");
writer.println("En Espa\u00f1ol:");
writer.println("\u00a1Hola Mundo!");
writer.println(format.format(new Date()));
writer.flush();
}
//日语
void processJapanese()throws Exception
{
locale=new Locale("ja","");
format=DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG,locale);
writer.println("in Japanese:");
writer.println("<br>");
writer.println("\u4eca\u65e6\u306f\u4e16\u754c");
writer.println(format.format(new Date()));
writer.flush();
}

%>

<%
//获得请求的语种
String language=(String)request.getParameter("language");
int lan=Integer.parseInt(language);
%>
<%
writer=out;

switch(lan)
{
case 1:processEnglish();break;
case 2:processChinese();break;
case 3:processKorean();break;
case 4:processRussian();break;
case 5:processSpanish();break;
case 6:processJapanese();break;
}
%>
</body>
</html>
guishuanglin 2004-11-22
  • 打赏
  • 举报
回复
<%@ page contentType="text/html; charset=gb2312"%>
在上面的页里加上这句话,却实不会乱码,但这个却不能解决变量是汉字的问题!!!
guishuanglin 2004-11-22
  • 打赏
  • 举报
回复
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
以下的可能出现乱码:<br>
<%
out.println("这里是乱码");
%>

</body>
</html>
--------------这种可能是乱码,因为汉子用java输出后是国际UN码,页里却要用gb2312显示,
你说不转换会正常显示不? 肯定不行,(cat4,不行,cat5好象服务帮你自已做了转变)
jim1516 2004-11-22
  • 打赏
  • 举报
回复
我也正为这个问题烦恼~~

请问楼上的,这个问题具体应该怎么解决啊?
有没有修改某个配置文件从而可以使整个应用都避免出现乱码?

我写的TAG和BEAN都存在乱码的问题!

guishuanglin 2004-11-22
  • 打赏
  • 举报
回复
<%@ page language="java" contentType="text/html; charset=gb2312"%>
这句话解说,他只是说明这一页用gb2312来显示,如果是网页中直接写中文,当然是显示正确,
你也可以把后面改成德语,他一样是正确的德文!这与乱码无关!!
,但是,用write输出的是UN码,gb2312,里没有UN码!!
所以同一汉字在UN输出后,再用gb2312来显示,这样可以码?当然不行,乱码!
guishuanglin 2004-11-22
  • 打赏
  • 举报
回复
如果,不是UN码,请用程序转变成UN码,现输出,或者用命令强制输出UN码。
guishuanglin 2004-11-22
  • 打赏
  • 举报
回复
肯定有问题:因为java用的标准字串,与我们的编码是不同的!当然在输出时出现乱码,因为我们平常用的是gb2312,java用的是un码,问题就在这里。还有汉字作参数也一样出现乱码,这是同一问题。

一话解决:在程序中使用UN码,问题全解决

81,092

社区成员

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

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