黑马程序员技术交流社区
标题:
联通 问题
[打印本页]
作者:
张明星
时间:
2012-3-28 10:20
标题:
联通 问题
新建记事本之后,输入联通,关闭打开后是4个字节的乱码;但是把乱码删掉,重新输入联通,关闭打开后却是9个字节的联通,不再是乱码!同一个文件,两次输入联通,得到的结果却不同,这是为什么??
作者:
鲍亚坤
时间:
2012-3-28 10:37
本帖最后由 鲍亚坤 于 2012-3-28 10:39 编辑
在简体中文操作系统中默认的本地字符集编码是GBK编码,除非你在保存记事本文本文件时候选择了其他编码方式,否则用记事本录入的字符信息将使用GBK编码进行储存。巧合的是,“联通”这两个字符的GBK编码具有UTF-8编码的特征,记事本犯下的错误正是将GBK编码存放的记录有“联通”两个字符的文件误认为UTF-8编码的文件。
对于中文字符,UTF-8编码要用三个字节进行编码,因此,如果你使用记事本录入“联通”,然后选择以UTF-8编码方式保存的话,文件大小应为9个字节(包含三个字节的开头数据),而同样的文件GBK编码却是4个字节。
作者:
djx900
时间:
2012-3-28 14:28
因为联通 适应能力强 谁都能编译成 计算机识别码 联通就是一个 传说中的管死不管埋 的 一个受害者
作者:
newlaw2013
时间:
2012-3-28 16:44
/*
是记事本解码的问题。当用记事本存入”联通“二字时,记事本会用Windows系统默认的编码方式去存,
在简体中文操作系统中默认的本地字符集编码是GBK编码,所以记事本就将”联通“二字用GBK编码的形式
解析成二进制数据存入电脑硬盘中。
而当打开的时候,因为”联通“这两个字的二进制编码形式正好符合了UTF-8的编码形式。
下面是如下程序的运行结果:
-63
11000001
-86
10101010
-51
11001101
-88
10101000
UTF-8中的编码参考:API文档中java.io----->DataInputStream------>readUTF(DataInput in):UTF-8修改版
看以上转成的4段二进制码,都符合了UTF-8的开头特征:
110开头
10开头
110开头
10开头
这四段的二进制码横着连起来,用GBK来解结果就是"联通",如果用UTF-8来解,结果就未知了!
*/
class UnicomDemo
{
public static void main(String[] args) throws Exception
{
String str ="联通";
byte[] by = str.getBytes("GBK");
for(byte b :by)
{
//使用String的getBytes()方法,将“联通”转为4个字节的表示:
System.out.println(b);
//得到二进制码:
System.out.println(Integer.toBinaryString(b&255));
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2