当前位置: 技术问答>java相关
读取中文的问题
来源: 互联网 发布时间:2015-08-09
本文导语: 我改动了一个书上的读取英文字符的例子,想从一个文件中读取中文字符,程序如下(source.txt中的内容为中文),可是显示为: ?? 总数为 2 import java.io.*; public class IODemo2 { public static void main(String[] args) ...
我改动了一个书上的读取英文字符的例子,想从一个文件中读取中文字符,程序如下(source.txt中的内容为中文),可是显示为:
??
总数为 2
import java.io.*;
public class IODemo2
{
public static void main(String[] args)
{
int i;
byte b;
try
{
DataInputStream in = new DataInputStream(new ileInputStream ("c:\jdk\source.txt"));
i=0;
while(i>=0)
{
try
{
b=in.readByte();
System.out.print((char)b);
i++;
}
catch(Exception e)
{
System.out.println();
System.out.println("总数为 "+i);
in.close();
i=-1;
}
}
}
catch(Exception e){}
}
}
??
总数为 2
import java.io.*;
public class IODemo2
{
public static void main(String[] args)
{
int i;
byte b;
try
{
DataInputStream in = new DataInputStream(new ileInputStream ("c:\jdk\source.txt"));
i=0;
while(i>=0)
{
try
{
b=in.readByte();
System.out.print((char)b);
i++;
}
catch(Exception e)
{
System.out.println();
System.out.println("总数为 "+i);
in.close();
i=-1;
}
}
}
catch(Exception e){}
}
}
|
import java.io.*;
public class IODemo2
{
public static void main(String[] args)
{
int i;
try
{
FileReader in = new FileReader("C:\jdk\source.txt");
i=0;
while(i>=0)
{
try
{
i=in.read();
System.out.print((char)i);
}
catch(Exception e)
{
}
}
in.close();
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
}
public class IODemo2
{
public static void main(String[] args)
{
int i;
try
{
FileReader in = new FileReader("C:\jdk\source.txt");
i=0;
while(i>=0)
{
try
{
i=in.read();
System.out.print((char)i);
}
catch(Exception e)
{
}
}
in.close();
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
}
|
用:
String strResult="";
.
.
.
String str=in.readLine();
strResult=strResult+str;
.
.
.
System.out.println("总数为 "+strResult.Length);
String strResult="";
.
.
.
String str=in.readLine();
strResult=strResult+str;
.
.
.
System.out.println("总数为 "+strResult.Length);
|
建议使用StringBuffer代替String,不然文件大了会很慢的,最好是一行统计一次,最后相加
|
??
char是16位
汉字编码也是16位(unicode)
???
char是16位
汉字编码也是16位(unicode)
???
|
import java.io.*;
public class IODemo2
{
public static void main(String[] args)
{
int i;
char b;
try
{
FileReader in = new FileReader ("c:\jdk\source.txt"));
i=0;
while(i>=0)
{
try
{
b=in.read();
System.out.print(b);
i++;
}
catch(Exception e)
{
System.out.println();
System.out.println("总数为 "+i);
in.close();
i=-1;
}
}
}
catch(Exception e){}
}
}
public class IODemo2
{
public static void main(String[] args)
{
int i;
char b;
try
{
FileReader in = new FileReader ("c:\jdk\source.txt"));
i=0;
while(i>=0)
{
try
{
b=in.read();
System.out.print(b);
i++;
}
catch(Exception e)
{
System.out.println();
System.out.println("总数为 "+i);
in.close();
i=-1;
}
}
}
catch(Exception e){}
}
}
|
to:
ggyy(没钱?滚蛋!--沧海桑田,伶仃过洋)
你这样不可以吧?
读入中文的时候你会把一个字拆成两个字吧?
ggyy(没钱?滚蛋!--沧海桑田,伶仃过洋)
你这样不可以吧?
读入中文的时候你会把一个字拆成两个字吧?
|
read
public int read()
throws IOExceptionRead a single character.
Overrides:
read in class Reader
Returns:
The character read, or -1 if the end of the stream has been reached
Throws:
IOException - If an I/O error occurs
///所以read是读取一个char的,只不过又将他转化为了32位了。
//但是不是说读取32位的(2个字节)
System.out.print((char)i);
所以不会读入中文的时候你会把一个字拆成两个字
public int read()
throws IOExceptionRead a single character.
Overrides:
read in class Reader
Returns:
The character read, or -1 if the end of the stream has been reached
Throws:
IOException - If an I/O error occurs
///所以read是读取一个char的,只不过又将他转化为了32位了。
//但是不是说读取32位的(2个字节)
System.out.print((char)i);
所以不会读入中文的时候你会把一个字拆成两个字
|
楼上,你的程序连编译都通不过啊!
|
哦,不好意思,没看到你的第2段程序。
但为什么读文件会多一个问号出来
但为什么读文件会多一个问号出来