writeUTF

DataInputStream,DataOutputStream读写UTF8原理

大憨熊 提交于 2020-02-29 21:43:17
今晚上写代码玩,用到 java.io.RandomAccessFile.writeUTF(String) 函数,而文件默认保存为gbk,显然是乱码。突然想起来去看看存储编码规则,就去找了些文章了解writeUTF(String)的原理,在此记录。 首先需要弄明白unicode与utf8的表示规则,搜到@Feng哥的一篇文章《 字符编码笔记:ASCII,Unicode和UTF-8 》,写的很明白,在此招录一段: | Unicode符号范围 | UTF-8编码方式 | 0000 0000-0000 007F | 0xxxxxxx | 0000 0080-0000 07FF | 110xxxxx 10xxxxxx | 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx | 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 下面,还是以汉字"严"为例,演示如何实现UTF-8编码。 已知"严"的unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此"严"的UTF-8编码需要三个字节,即格式是"1110xxxx 10xxxxxx 10xxxxxx"。然后,从"严"的最后一个二进制位开始