csdn传说的高人们帮我解决这个小问题吧。我要疯了!!有是高分!

松耦合紧内聚 2002-02-21 10:09:25
我一直在用jb6做一个可以分页显示一个文件的applet
在jb的view下不用进行编码转换就可以显示中文.开始很奇怪,因为这个applet始终不能在ie下显示,看不到ie的效果.后来的高人们指示下载了最新的java plug in 可以了.
但是在ie下就显示不了中文了!!
我也可以理解其中的原因.但是当我做转换的时候,问题发生了.
我的思路是:
1.从得到的url出得到文件.
URL aURL= new URL("http://127.0.0.1:8080/12.txt");
BufferedReader dis=new BufferedReader(new InputStreamReader(aURL.openStream()));
2.用dis.readLine(),把每一次读到的放到String buffer中,每读21行(自己定义的每页显示21行),对得到的 buffer进行统计.得到buffer的长度.然后把他放到一个对象里.每个对象纪录这个页的起始位置(可以理解为上一页的终止位置)和终止位置(当前buffer的长度).然后把对象存放到一个Vector中,最后bufffer为全篇文章的内容.
3.这样想看那页的内容,就可以从vector中调相应页的对象.得到相应页的起始位置和终止位置.然后根据着两个位置,用buffer.substring(起址,终址),得到相应页的内容.

我的转换方案是:
1
对buffer.substring(起址,终址)得到的字符串进行编码转换,
testArea1.setText(new String(buffer.substring(起址,终址).getBytes("GBK"),"8859_1"));
报错:说GBK和ISO8859_1是不可识别的.
2
我把编码转换放在每一次的dis.readLine()后进行,想让他存到buffer中的就是转换好了的.再取得buffer的长度..... 但是在view中显示就成了乱码!!在ie中根本无法显示文本(applet可以初始化).java控制台说是数组的索引越界!!
3
我也试着用native2ascii将12.txt变为ascii码的,但是运行的太慢,根本等不及,并且看不见结果不只是成功还是失败.(native2ascii这个我也是从别的地方看的,想不起来了),好像是解决的一种方法.
反正都出不来,瞎试吧!!

我如何才能让他显示中文呢?是不是我从根本上就错了呢?

这个问题对我来说真的是很棘手!!我在赶时间!!请高人救救我吧!!

主要程序:
//主要变量定义
static String buffer=null;//存放文章的字符串
static Vector pos=new Vector();
static int pages=0;//总页数
static int currpage=0;//当前页
//存放每页起终位置的对象
class StrEnd{
private int startpos,endpos;
StrEnd(int str,int end){
startpos=str;
endpos=end;
}
int getStr(){
return startpos;}
int getEnd(){
return endpos;}
}


public void getURL(){
String s=null;
int rows=0;
//byte[] b1=null;
try{ URL aURL= new URL("http://127.0.0.1:8080/12.txt");
BufferedReader dis=new BufferedReader(new InputStreamReader(aURL.openStream()));
while((s=dis.readLine())!=null)
{
// b1=s.getBytes();
// String s1=new String(b1,"8859_1");

buffer=buffer+s+"\n";

rows=rows+1;

if (rows==21){

if (pos.size()==0)/*判断是第否为第一页*/

pos.addElement(new StrEnd(4,buffer.length()));

else
pos.addElement(new StrEnd(((StrEnd)pos.elementAt(pos.size()-1)).getEnd(),buffer.length()));
rows=0;
pages=pages+1;
}//if rows
}//while
if (rows<21)//文章不到一页或者最后一页不足满页
{ pos.addElement(new StrEnd(((StrEnd)pos.elementAt(pos.size()-1)).getEnd(),buffer.length()));
pages=pages+1;}
label3.setText(Integer.toString(pages));

}
catch(MalformedURLException e){
System.out.println("URL in wrong form,check it again");
}
catch(IOException e){
System.out.println("IO Exception ocurred when get information.");}

}
//得到第一页
public void getFirstPage(){
textArea1.setText(buffer.substring(((StrEnd)pos.elementAt(0)).getStr(),((StrEnd)pos.elementAt(0)).getEnd()));
textField1.setText("1");
currpage=1;
}
//得到下一页
public void getNextPage(){

if (currpage<=Integer.parseInt(label3.getText()))
{currpage=currpage+1;
textArea1.setText(buffer.substring(((StrEnd)pos.elementAt(currpage-1)).getStr(),((StrEnd)pos.elementAt(currpage-1)).getEnd()));
textField1.setText(Integer.toString(currpage));
}
}
//得到前一页
public void getFrontPage(){
if (currpage>=2)
{currpage=currpage-1;
textArea1.setText(buffer.substring(((StrEnd)pos.elementAt(currpage-1)).getStr(),((StrEnd)pos.elementAt(currpage-1)).getEnd()));
textField1.setText(Integer.toString(currpage));
}
}
//得到最后一页
public void getLastPage(){
textArea1.setText(buffer.substring(((StrEnd)pos.lastElement()).getStr(),((StrEnd)pos.lastElement()).getEnd()));
currpage=Integer.parseInt(label3.getText());
textField1.setText(Integer.toString(currpage));
}
//跳到任一页
public void jumpPage(){
int s=Integer.parseInt(textField1.getText());
int e=Integer.parseInt(label3.getText());
if (s<e){
textArea1.setText(buffer.substring(((StrEnd)pos.elementAt(s-1)).getStr(),((StrEnd)pos.elementAt(s-1)).getEnd()));
currpage=s;}
else getLastPage();
textField1.setText(Integer.toString(currpage));
}
...全文
63 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
freekevin 2002-02-22
  • 打赏
  • 举报
回复
你去查查相关的贴子,这个问题俺都回答厌了
skyyoung 2002-02-22
  • 打赏
  • 举报
回复
8859-1 写成ISO-8859-1

用javac -encode GBK 参数来编译你的applet.
ahbill 2002-02-22
  • 打赏
  • 举报
回复
看看下面这段代码,标准的读文件信息。
我就是这么用的,中文显示正常。
String buffer = null;
bufferVector = new Vector(10, 1);
BufferedReader breader = new BufferedReader(new inputStreamReader (new FileInputStream(fileName),"GBK"));
buffer = breader.readLine();
while(buffer != null) {
bufferVector.addElement(buffer); //载入一行
buffer = breader.readLine();
}
breader.close();
祝你好运!
松耦合紧内聚 2002-02-22
  • 打赏
  • 举报
回复
去哪下?
fifth_season 2002-02-22
  • 打赏
  • 举报
回复
是不是装一个支持中文jre就可以了
松耦合紧内聚 2002-02-22
  • 打赏
  • 举报
回复
首先谢谢ahbill(阿漂)的回答.
我回去用了你的方法,但是java控制台报错:
java.io.UnsupportedEncodingException:GBK
我的文件内容显示不出来,但是在jb6环境下可以显示.
为什么我的环境不支持这种编码方式呀?
我的java plug-in的版本是1.3.1_02
JDK是1.3(jb6下的)
JRE是1.3.1
我在程序里import了如下的包:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.net.*;
import java.io.*;
import java.util.*;
是不是还缺什么?我看不出来!!
如果去掉:"GBK",可以显示,但是就是乱码了.(废话).
好像还是不支持"GBK"的原因.
还有就是我装了多个版本不同的jdk,jre,plug-in但都是1.3.X的
这样有问题码?是不是和他有关??
路人甲说的把8859_1换成ISO8859_1,没有用,和上回的一样。
松耦合紧内聚 2002-02-22
  • 打赏
  • 举报
回复
freekevin(kevin)你也太强了!!

23,407

社区成员

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

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