java I/O 输入输出流的编码问题_新梦起航的博客-程序员秘密

技术标签: java  

在中文机器下分别创建三个文本文件,分别为:

 

打开文本文件之后分别如下:

        

前两者出现了乱码问题:

使用另存为文件时会发现,前两种文本使用的编码方式为UTF-8,后一种为ANSI编码(中文机器下代表gbk编码)

联、联通 保存时采用的编码方式为UTF-8,而中文机器下在文本编辑器中输入的文本只有ANSI编码格式才能正常显示

注:文本编辑器是可以识别任何编码方式的,如果在其他地方新建一个utf-8编码的文本文件,粘贴到机器上的某个位置,如桌面。。打开后不会出现乱码。在新建文本文件时直接编辑文本,若文本内容不是ANSI编码,就会出现乱码。


对于JAVA语言中编码方式的使用方式如下:

public static void main(String[] arg) throws Exception {
		String s = "慕课网ABC";
		// 转换成字节序列用的是项目默认的编码方式(该项目默认为 utf-8)
		byte[] bytes1 = s.getBytes();
		//utf-8编码中文占3个字节,编码英文占1个字节
		for (byte b : bytes1) {
			// 把字节转换成了int,以16进制的方式显示
			System.out.print(Integer.toHexString(b & 0xff) + " ");
		}
		System.out.print("\n");
		
		//把字符串按指定格式的编码(gbk)转换成字节
		byte[] bytes2 = s.getBytes("gbk");
		//gbk编码中文占两个字节,英文占1个字节
		for(byte b : bytes2) {
			//把字节转换成了int,以16进制方式显示
			System.out.print(Integer.toHexString(b & 0xff) + " ");
		}
		System.out.print("\n");
		
		//java是双字节编码 utf-16be
		byte[] bytes3 = s.getBytes("utf-16be");
		//utf-be 中文占用2个字节,英文占用2个字节
		for(byte b : bytes3) {
			System.out.print((b & 0xff) + " ");
		}
		System.out.print("\n");
		
		/*
		 * 当你的字节序列是某种编码时,这个时候想把字节序列转换
		 * 成字符串时,也需要用这种编码方式,否则会出现乱码
		 */
		//不指定编码方式时,用项目默认的编码(当前为utf-8)
		//因为bytes3编码方式为utf-16be,故会出现乱码
		String str1 = new String(bytes3);
		System.out.println(str1);
	    //改为如下形式就不会有乱码
		String str2 = new String(bytes3, "utf-16be");
		System.out.println(str2);
		
		//相应的bytes1的编码方式 是默认的编码方式(utf-8)
		String str3 = new String(bytes1);
		String str4 = new String(bytes1, "utf-8");
		System.out.println(str3 + " " + str4);
		
		//bytes2的编码方式为gbk
		String str5 = new String(bytes2, "gbk");
		System.out.print(str5);
		
		/*
		 * 文本文件 就是字节序列
		 * 可以是任意编码的字节序列
		 * 如果我们在中文机器上直接创建文本文件
		 * 那么该文本文件只认识ansi编码
		 * 中文系统下ansi编码代表gbk编码
		 * 文本文件可以识别任意类型的文本文件,若把文件拷贝到机器上则不会出现乱码
		 * 联通、联这是一种巧合,他们正好符合了utf-8编码的规则。
		 *<strong><span style="color:#ff6666;"> eclipse编辑器中的每个项目都有自己的编码方式
		 * 该项目设置为什么编码方式,则该项目中的文本文件必须为该编码方式
		 * 否则会出现乱码
		 * 若另外的编码方式文本内容拷贝到该项目的文本文件中,则不会出现乱码
		 * 因为,编辑器会自动转换成对应的编码方式显示</span></strong>
		 * 
		 */
	}


eclipse中查看一个项目的文本编码方式:

右键该项目-----〉选择 Properties(属性) -----〉进入到如下界面:

 

可以看到被框住的部分:Text file encoding 第一行为项目默认的编码方式,可以通过第二项修改编码方式,然后,

一次Apply ---> Ok

即可修改或查看编码方式了。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013599426/article/details/51771396

智能推荐

《Unity》建立遮罩和让某个按钮高亮的方法_unity image 遮罩_上证50指数etf的博客-程序员秘密

遮罩:整个mask 黑色一点的图片在UI上面,不需要特别指定这个遮罩image的位置,通过设定orderLayer的方法让这个image的层级最高即可高亮:找到那个按钮,给那个按钮添加Canvas,GraphicRaycaster,设置OverrideSorting,然后设置个比mask 更大的layer就行了。...

性能之巅:Linux网络性能分析工具-netstat,ifconfig,nicstat,traceroute,tcpdump_phymat.nico的博客-程序员秘密

原文地址:http://www.infoq.com/cn/articles/linux-networking-performance-analytics本文介绍基于Linux操作系统的网络性能分析工具。它们的使用策略参见前面的部分。本节介绍的工具列于下表中。LinuxSolaris描述netstatnetsta

光棍节程序员闯关秀第1关(总共10关)_Shannonnnn的博客-程序员秘密

网站在此:https://1111.segmentfault.com/ Part1: 查看源代码,发现a标签的颜色和背景色一样,导致了我们看不到a过关地址,方法很简单,直接复制源代码中的key即可,或者ctrl+a然后单击进入下一关即可 Part2:查看源代码,发现key:b88........,填入表单,然后回车即可过关。Part3:浏览器F12中NE...

HC32L110(五) Ubuntu20.04 VSCode的Debug环境配置_IOsetting的博客-程序员秘密

本文介绍在Ubuntu20.04下, VSCode中如何设置对 HC32L110 进行 debug

Android SurfaceView画抛物线_gf771115的博客-程序员秘密

转自:http://blog.csdn.net/sodino/article/details/7704084同样,先上效果图如下:效果图中,抛物线的动画即是由SurfaceView实现的。底部栏中的文字翻转详情相关帖子:[Android] 文字翻转动画的实现需求:1.实现抛物线动画   1.1 设计物理模型,能够根据时间变量计算出某个时刻图片的X/Y坐标。

驱动字库芯片GT23L24M0140_字库 gt32l 驱动_jdh99的博客-程序员秘密

驱动字库芯片GT23L24M0140本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.环境:主机:WIN8开发环境:MDK5.13mcu: stm32f407VGIGH6字库芯片:GT23L24M0140源代码:drv_font.h/***********************************************************

随便推点

CentOS配置syslog发送到服务器_centos syslog_zetion_3的博客-程序员秘密

企业经常会有需要上syslog系统这里介绍一下如何配置CentOS是rsyslog默认情况是有安装1、检查下系统是否已安装rpm -qa | grep rsyslogrsyslogd -v#若没有安装可以使用以下命令安装yuminstall rsyslog2、配置rsyslog守护进程为客户端vim/etc/rsyslog.conf#在底部添加(这里IP地址写你的syslog服务器端的IP地址,端口记得火墙放行这个是服务器端的端口)注意@前面是一个tab*.*...

时间戳转换日期及xx分钟/小时/天前_时间戳转小时_皮蛋小粥的博客-程序员秘密

时间戳:时间戳是自 1970 年 1 月 1 日(00:00:00 GMT)至当前时间的总秒数既然是秒数,那么在js中换成时间日期格式就不是什么难事了。将时间戳转换成日期格式: function transDate(merStr) { var n = merStr; var date = new

华东交大的课程设计_lijiangdeshui的博客-程序员秘密

<br />本人有很多华东交大计算机软件专业的课程设计。

17.12.2B组总结_kyrielrving谐音_kyrielrving的博客-程序员秘密

17.12.2B组总结T1比较奇怪的一道题,考试时打了个三循的两维DP,只勉强跑过了50分(数据太水)。 然而事实告诉我们,我的第一维,完全可以省略,于是我又过了60分。 但是我猛然发现,正解居然要打斜率优化,我推了近半小时,仍未推出。怒弃。。。好吧,还是不可能的,我又推了半天,终于推出正解(长征般的痛苦)。 过程太过艰苦,在此不详说。 总之最后斜率就是这么个东西:function pd1

USB扫码枪二维码读取(二)——MFC篇_mfc 获取扫码枪数据_夫人的泡泡鱼的博客-程序员秘密

USB扫码枪为即插即用,通过类似键盘的方式和系统进行交互,在MFC中进行处理比较方便,对键盘消息进行处理即可。(1)文本框输入获取焦点,扫描后自动显示在文本框内。(2)在PreTranslateMessage中对消息进行处理获取扫码数据。使用第二种方式对接收到的一个个键盘数值的处理。我的扫码枪设置后扫码的情况举例如下:(1)在大写字母前发送shift的虚拟码16(2)第二功...

【HTTP】Fiddler(二) - 使用Fiddler做抓包分析_如何使用fiddler对抓包的数据进行分析_ohmygirl的博客-程序员秘密

1.查看http请求2.复制、保存和重放http请求3.fiddler命令4.session状态5.设置断点6.模拟http请求7.流模式

推荐文章

热门文章

相关标签