您现在的位置: 爱51代码网 >> 范文 >> 文章正文
文件字节流是如何把字节转换成字符串在文件中显示的

public class FileOutputStreamDemo2 {
public static void main(String[] args) throws IOException {
//我MyEclipse设置的默认编码方式为gbk
FileOutputStream fos = new FileOutputStream("111.txt");
String str = "java咖啡馆";
//"java咖啡馆"以gbk编码方式变成的字节数组如下:
byte[] gbkData = {106 ,97 ,118, 97, -65, -89, -73, -56, -71, -35};//共10字节
fos.write(gbkData);
//"java咖啡馆"以utf-8编码方式变成的字节数组如下:
byte[] utf8Data = {106 ,97, 118, 97, -27, -110, -106, -27, -107, -95, -23, -90, -122 };//共13字节
fos.write(utf8Data);
String str2 = new String(utf8Data);
//显示乱码
System.out.println(str2);
                          }
}
首先:我电脑的默认编码方式为gbk
问题1:为什么用同一个字节流往文件里面写字节,一次写10个字节,一次写13个字节,会得到同样的结果?
       字节流往文件里面写字节的时候应该要按照某种编码方式把写进来的字节转换成字符吧,
       10字节与13字节转换后怎么可能变成同样的结果?
问题2:既然fos.write(utf8Data);这条语句把utf-8方式得到字节数组写进文件再变成字符串的时候不显示乱码
       而System.out.println(str2);这条语句由utf-8方式得到的字节数组变成字符串又显示为乱码

我的意思是:既然我电脑设置的默认编码方式为gbk,那么结果应该如下
    gbkData 这个字节数组,写进文件后以gbk方式可以正常把字节数组变成"java咖啡馆"显示出来
    utf8Data这个字节数组,写进文件后以gbk方式应该显示乱码
    System.out.println(str2);这条语句显示乱码
1、你把UTF-8编码的数据写进文件,你怎么知道打开的时候编辑器用的是GBK编码?一般编辑器都能智能识别编码的,如果它发现用GBK解码出错,那就会换一种编码尝试解码。
2、UTF-8数据打印到屏幕上乱码是因为你解码成字符串的时候指定了错误的编码
String str2 = new String(utf8Data);这样用的是默认编码,所以你这样就是用GBK编码去解码UTF-8,当然乱码
要这样指定编码才行:String str2 = new String(utf8Data, "UTF-8");

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 最新文章 热点文章 相关文章
    maven如何加自定义的包
    redhat 2.6 (santigo 5.6) vsftp
    shell如何实现自动填写操作执行下
    linux shell 文件配置sh:color:
    shell script语法一定要加path吗
    SecureCRT如何访问虚拟机vmWare中
    C#如何读取WINDOWS的放大系数
    cximge的图如何存入数据库并提取
    DBGRID控件显示查询结果文本类型
    TChart控件如何把表中右边的系列
    redhat 2.6 (santigo 5.6) vsftp
    shell如何实现自动填写操作执行下
    linux shell 文件配置sh:color:
    shell script语法一定要加path吗
    SecureCRT如何访问虚拟机vmWare中
    C#如何读取WINDOWS的放大系数
    cximge的图如何存入数据库并提取
    DBGRID控件显示查询结果文本类型
    TChart控件如何把表中右边的系列
    fastreport提示没有找到fr_class
    To display the auto-config
    struts1如何获取前台页面的值
    maven如何加自定义的包
    Dispatcher initialization 
    java怎么随机生成24字节Byte
    spring如何动态注解任务调度
    highcharts服务器怎么自动端
    java如何读取web.xml里面的c
    java如何循环可以可以获取到
    Myeclipse 总是去请求一个错
     



    设为首页 | 加入收藏 | 网站地图 | 友情链接 |