java开发编程及工程部署中编码问题

public static void currentSystemChartSet(){
		System.out.println("Default Charset: " + Charset.defaultCharset());
		System.out.println("file.encoding: " + System.getProperty("file.encoding"));
		System.out.println("sun.jnu.encoding: "+System.getProperty("sun.jnu.encoding")); 
		System.out.println("Default Charset in Use: " + (new OutputStreamWriter(new ByteArrayOutputStream()).getEncoding()));
		
		BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
		BufferedReader br = new BufferedReader(new InputStreamReader(inputStream,encoding));//最好写成这种样式
	}

输出结果:
Default Charset: UTF-8
file.encoding: UTF-8
sun.jnu.encoding: GBK
Default Charset in Use: UTF8


1.Charset.defaultCharset(),获取的语言环境的编码到底是哪里来的
是eclipse默认编码的问题;修改既可以。如下图

但是这就是问题了:线上是放在tomcat中的。没有eclipse。你说Charset.defaultCharset() 读取是哪里的语言环境的编码呢?
补充:tomcat没有默认语言编码。可以设置conf/server.xml文件中Connector 标签;设置<Connector URIEncoding="utf-8" />;
可以修改环境变量:
变量名:JAVA_TOOL_OPTIONS变量值:-Dfile.encoding=UTF-8

Charset.defaultCharset()默认读取还是配置的语言编码;也是就是系统的;
在java中,一切存储在硬盘上的数据都是二进制的字节,当我们从硬盘读取到字节数组后,如果我们需要把字节    数组转化成String类型的字符串,字节数组需要遵守一定的规则才能正确的转化为字符串,这就用到了编码 :charset。
1、如果使用了eclipse,由java文件的编码决定
2、如果没有使用eclipse,则有本地电脑语言环境决定,中国的都是默认GBK编码


2.System.getProperty("file.encoding")
以前一直以为file.encoding的编码就是系统的编码,直到最近碰见一个怪异的情况:WEB工程中通过上述代码打印出来的编码是GB18030,而登录Linux服务器执行locale或者vi /etc/sysconfig/i18n查出来的编码是UTF-8,竟然两者不一致,一度怀疑是不是服务器编码变了,引发了这篇文章的思考。
file.encoding的值保存的是每个程序的main入口的那个Java文件的保存编码,是.java文件的编码。

3.System.getProperty("sun.jnu.encoding")
sun.jnu.encoding 影响文件名的创建、类名的读取和Main方法参数的读取
参考:http://huangyunbin.iteye.com/blog/2356505  http://blog.csdn.net/youling_lh/article/details/9475519

参考:http://blog.csdn.net/bxyz1203/article/details/7352864 http://blog.csdn.net/u010234516/article/details/52842170
http://blog.csdn.net/loongshawn/article/details/50918506 http://blog.csdn.net/spritenet/article/details/5650622


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值