java编码备忘

1. "中".getBytes()返回什么?

 A:和源文件的编码有关,gbk的话返回两个字节的编码:[-42, -48],utf-8的话,返回三个字节的编码:[-28, -72, -83],

代码:

System.out.println(Arrays.toString("中".getBytes()));   

输出:

源文件为gbk编码:[-42, -48]

源文件为utf-8编码:[-28, -72, -83]

[-28, -72, -83]对应的16进制形式如下:

System.out.println(Integer.toHexString(-28));    // 输出ffffffe4

System.out.println(Integer.toHexString(-72));    // 输出ffffffb8

System.out.println(Integer.toHexString(-83));    // 输出ffffffad

对于utf-8编码的文件,在vscode里面,使用hexdump插件查看【中】这个字的内容如下:

Offset: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F   

00000000: E4 B8 AD 


2. 使用FileOutputStream.write('中')到一个文件中,到底写入了什么?写入了几个字节?

A:FileOutputStream.write()始终只写一个字节,'中'是一个字符,编码为20013,其二进制为:

System.out.println((int) '中'); // 20013

System.out.println(Integer.toBinaryString('中')); // 100111000101101

write()方法将int类型转化为byte类型,只取后面8位,刚好为48. (0x2D)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,906评论 18 399
  • 概述 java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。java.io ...
    Steven1997阅读 13,023评论 1 25
  • 曾有人这么形容花艺师,说:“每一个花艺师都是一名神奇的魔法师。”这话细细品味,描述地确实很贴切,看似很普通的花材素...
    冰火冬天阅读 3,624评论 0 0
  • 2016年4月9日 与艺术家刘庸之老师聊到素描,刘老师先微笑着向女儿提了一个问题:世界上有多少个人,你知道吗?我心...
    wuyandongji阅读 5,884评论 0 0
  • 迈赫特说:“要求别人更有创造力,其实是在要求他们离经叛道——突破社会准则。”会被同事指指点点的想法可能抑制团队的创...
    跟美过不去阅读 1,261评论 0 0