为了账号安全,请及时绑定邮箱和手机立即绑定

初学者请教关于java编码的问题

初学者请教关于java编码的问题

米琪卡哇伊 2019-03-20 14:15:06
很简答的的示例程序,大家看下我的问题是,我不明白,文件的明明是0-50000这些数字,为什么文件打开以后,里面是各种各样的符号呢,有中文,英文,日文等等各种字符。我能知道是unicode编码的原因,但是不是很清楚原理请各位帮忙解释下,或者给个详细解释这个的链接之类的更好。非常感谢!
查看完整描述

3 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

我来尝试回答一下,现学现卖 ^_^ (我使用 linux 可能不大一样)

先看文档中文,它有五个方法

/**

 * write(String str)

 * 写入字符串。

 * write(int oneChar)

 * 写入单个字符。要写入的字符包含在给定整数值的 16 个低位中,16 高位被忽略。用于支持高效单字符输出的子类应重写此方法。 

 * write(char[] buf)

 * 写入字符数组

 * write(String str, int offset, int count)

 * write(char[] buf, int offset, int count)

 */

用的是 write(int oneChar) 这一种,写入单个字符用计算器高位被忽略就是

  00000000|00110010   //50

1|00000000|00110010   //65536 + 50

-------------------

然后两者其实结果是一样的。过程如下,只看最后两段即可

import java.io.FileWriter;


/**

 * Created by star on 11/29/13.

 * write(char[] buf, int offset, int count)

 * write(String str)

 * write(int oneChar)

 * write(char[] buf)

 * write(String str, int offset, int count)

 */

public class Encode {

    public static void main (String [] args) {

        FileWriter fw = null;

        try {

//            *输出字符串"妳好"

//            fw = new FileWriter("/home/star/unicode.txt");

//            String a = "妳好";

//            fw.write(a);

//            fw.close();


//            *这里打印的不是50,而是50的16进制所代表的值「2」

//            fw = new FileWriter("/home/star/unicode.txt");

//            int a = 50;

//            fw.write(a);

//            fw.close();


//            *比16位高的位数被忽略。会打印相同的两个「2」

//            fw = new FileWriter("/home/star/unicode.txt");

//            fw.write(50);

//            fw.flush();

//            fw.write(65536 +50);

//            fw.flush();

//            fw.close();


//            *我想你要的结果是这样的吧 0x4e00 开始

            fw = new FileWriter("/home/star/unicode.txt");

            for (int a = 19968 ; a<19968 + 500;a++) {

                fw.write(a);

            }

            fw.close();


        } catch (Exception e) {

            e.printStackTrace();

            System.out.println("文件写入错误");

            System.exit(-1);

        }


    }

}


查看完整回答
反对 回复 2019-04-15
  • 3 回答
  • 0 关注
  • 443 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信