csdn传说的高人们帮我解决这个小问题吧。我要疯了!!有是高分!
我一直在用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));
}