扫码关注官方订阅号
很简答的的示例程序,大家看下
我的问题是,我不明白,文件的明明是0-50000这些数字,为什么文件打开以后,里面是各种各样的符号呢,有中文,英文,日文等等各种字符。 我能知道是unicode编码的原因,但是不是很清楚原理 请各位帮忙解释下,或者给个详细解释这个的链接之类的更好。
非常感谢!
人生最曼妙的风景,竟是内心的淡定与从容!
先看文档中文,它有五个方法
/** * 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); } } }
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
我来尝试回答一下,现学现卖 ^_^ (我使用 linux 可能不大一样)
先看文档中文,它有五个方法
用的是 write(int oneChar) 这一种,写入单个字符表,用计算器高位被忽略就是
然后两者其实结果是一样的。过程如下,只看最后两段即可