站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2ME 专题读文本文档出现乱码

读文本文档出现乱码

摘要: 读文本文档出现乱码



程序目的:
读一个文本文档中的内容,将它们一页页的显示在屏幕上(目前只做了显示第一页),若原文本文档中有回车,在屏幕上也有回车,即分段。同时控制读出的字符不多不少刚好满屏。

问题:
1。读文本文档出现乱码问题.
2。文本输出位置有问题。有些字显示在了屏幕外

代码如下:
import java.io.*;

import javax.microedition.lcdui.*;



public class ReadBookCanvastwo extends Canvas {

public int canvasHeight,canvasWidth,wordHeight,wordWidth,row,column;
public long alreadyreadcounts=0;
public InputStream in;
//public DataInputStream datain;
//ByteArrayOutputStream byteout=new ByteArrayOutputStream();
//DataOutputStream dataout = new DataOutputStream(byteout);
public StringBuffer chars=new StringBuffer();
public String returnString;
public int y=0;//输出的坐标
public ReadBookCanvastwo() {
// TODO 自动生成构造函数存根
count();
read();
}

public void paint(Graphics g)
{
for(int i=0;i{
try//跳过以读的字符
{
in.skip(alreadyreadcounts);
}
catch(Exception e)
{
System.out.println(e);
System.out.println("can not skip");
}

int s1;
int s2;
char s;
for(int j=0;j{
try
{
s1=in.read();
s2=in.read();
if(s1<0)
s1+=256;
if(s2<0)
s2+=256;
s=(char)(s1+(s2<<8));
alreadyreadcounts++;
if(s==(char)13)
break;
//dataout.writeChar(s);
chars.append(s);
System.out.println("s is"+s);
}
catch(Exception ss)
{
System.out.println(ss);
System.out.println("can not read char");
}
}

{//一行完了的处理


y=y+wordHeight;//输出点的y坐标
g.drawString(chars.toString(), 0, y, Graphics.TOP|Graphics.LEFT);
chars.delete(0, chars.length());
}
}
}

public void count()//计算canvas可以放几行几列
{
canvasHeight=this.getHeight();
canvasWidth=this.getWidth();
Font s=Font.getDefaultFont();
wordHeight=s.getHeight();
wordWidth=s.stringWidth("你");
row=canvasHeight/wordHeight;//可以放几行字
column=canvasWidth/wordWidth;//可以放几列字
System.out.println("row is"+row);
System.out.println("column is"+column);
}
public void read()//打开读入流
{
in = getClass().getResourceAsStream("/2.txt");
// datain=new DataInputStream(in);
}

}

能指出问题,不胜感激




差点出丑了,怎么在我这编译不了
原来是j2me
`````````````````````学习^-^
up


UP


高手啊


public void count()//计算canvas可以放几行几列

这个还是实时处理比较好,因为牵扯到标点符号,有的手机标点符号按全角,有的却是按半角~~

另外,乱码的现象,只要把TXT统一保存为Unicode就可以了~


java统一采用unicode编码,,
任何数据转换成unicode然后显示端采用对应的转码就不会出现乱码了。


初学..不过关于读乱码问题前段时间也遇到,我出现问题的主要原因是你这里的2.txt的编码不是UTF-8.2个解决办法,一个是在程序里做转码,另外一个就是把你的TXT转成UTF-8.然后就可以显示了....
至于第二个问题就关注高手们了~


看都不用看肯定是编码的问题!

public String(byte[] bytes,
String charsetName)
throws UnsupportedEncodingException构造一个新的 String,方法是使用指定的字符集解码指定的字节数组。新的 String 的长度是一个字符集函数,因此不能等于字节数组的长度。
当给定字节在给定字符集中无效的情况下,该构造方法无指定的行为。当需要进一步控制解码过程时,应使用 CharsetDecoder 类。


参数:
bytes - 要解码为字符的字节
charsetName - 受支持的 charset 的名称
抛出:
UnsupportedEncodingException - 如果指定字符集不受支持



手机支持最多的就UTF-8,你TXT是什么格式的。
除了ANSI以外所有编码开头都有2-3个字节的标示位,所以要用skip跳过去。
你可以看看这个。
http://blog.csdn.net/jlu3389

里面有关于读文件的狸子。


不同的手机支持不同的编码方式。
国内的手机大都支持ISO-8859-1,GBK,UTF-8。
但BIG5、Unicode等编码并不是所有手机都支持的。而且Unicode还有big endian和little endian的问题,还有BOM头的问题。
仔细检查下你的文本文件,编码最好上真机测试好。


import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import javax.microedition.lcdui.*;

class FullScreenCanvas extends Canvas
{
private int x, y;

public FullScreenCanvas()
{
x = 0;
y = 0;

setFullScreenMode(true);
}

public void PrintTextToCanvas(String strText, Graphics g)
{
g.setColor(0xffffff);

char[] chBuf = strText.toCharArray();
for(int i = 0; i < strText.length(); i++)
{
if(i != 0 && i % 11 == 0 || chBuf[i] == '/n')
{
x = 0;
y += 20;
}

g.drawChar(chBuf[i], x, y, 0);

if(chBuf[i] <= 128)
x += 11;
else
x += 22;

}
}

public void paint(Graphics g)
{
g.setColor(0x333333);
g.fillRect(0, 0, getWidth(), getHeight());

InputStream is = getClass().getResourceAsStream("/Story/mhj.txt");
InputStreamReader isr = new InputStreamReader(is);
ByteArrayOutputStream bos = new ByteArrayOutputStream();

if(isr != null)
{
int nRead = 0;
try
{
for(int i = 0; i < 1024; i++)
bos.write(isr.read());
}
catch(IOException ioe)
{
System.out.println(ioe.getMessage());
}
}

PrintTextToCanvas(new String(bos.toByteArray()), g);

}
}



↑返回目录
前一篇: 怎么把图片压缩为.m3g?
后一篇: 在模拟器上通过ota安装的程序不能在模拟器上运行是怎么回事/?