黑马程序员技术交流社区
标题: 关于IO输出问题 [打印本页]
作者: 彩虹 时间: 2012-5-9 09:08
标题: 关于IO输出问题
一.import java.io.*;
import java.util.*;
class propertiesDemo
{
public static void main(String[] args) throws IOException
{
//method_1();
loadDemo();
}
public static void loadDemo() throws IOException
{
Properties prop=new Properties();
FileInputStream fis=new FileInputStream("info.txt");
//将流中的数据加载进集合
prop.load(fis);
//System.out.println(prop);
prop.list(System.out);
}
}
代码中,如果将info.txt文本文件里的人名用汉字表示,在控制台上打印时为什么识别不出来,显示的是一 串???号
作者: H_H_K 时间: 2012-5-9 09:28
亲,中文是2个字节的, FileInputStream是字节流,拿一个中文的字符都想转换是转换不成的。
改成字符流就行了。
作者: H_H_K 时间: 2012-5-9 09:31
亲,中文是2个字节的, FileInputStream是字节流,拿中文的其中一个字节都想转换是转换不成的。
改成字符流FileReader就行了。
作者: 周素强 时间: 2012-5-9 09:46
本帖最后由 周素强 于 2012-5-9 09:52 编辑
load(InputStream) 方法默认用的是ISO 8859-1 字符编码,所以你的中文字会出现????的情况,
解决1,可以使用load(Reader)方法替换它。
解决2,load后在输出前利用编码(指定ISO 8859-1 字符集)再解码(指定gbk字符集)
编码:字符串变成字节数组
String -->byte[]:str.getBytes(字符集名);
解码:字节数组变成字符串
Byte[] -->String:new Strnig(byte[],字符集名);
作者: —__ 时间: 2012-5-9 10:12
1楼回答不正确
事实上关键在于你是用控制台打印的,而计算机语言对于字符的编码有很多用,就例如你用txt 等类型的文件查看一个字符时 事实上这个字符只是两个字节,而这两个字节经过了不同的编码进行翻译在成为你眼中看到的,所能识别的字体,而你用控制台打印并没有导入 编译方法,所以打印不出来 你可以参照我楼上兄弟的方法解决,他已经说出来了 我就只说一个思路
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |