java encoding.utf8.getbytes_String的getBytes()默认编码问题

我们学习java基础的时候.我们都知道在main方法中String的getBytes()方法如果不指定编码格式,默认是UTF-8的方法进行的编码.我们一直认为默认的编码格式就是UTF-8.直到我们学习了javaWeb.在Servlet中.我们通过getBytes()获取的是按照GBK进行编码的.至此我们就有了疑惑.这个getBytes()方法到底是怎么选择默认编码的.我们带着疑惑,去翻一下String的源代码.

[AppleScript] 纯文本查看 复制代码

继续跟进StringCoding的encode方法

[AppleScript] 纯文本查看 复制代码

从以上源码中可以看出是通过

[AppleScript] 纯文本查看 复制代码

来获取默认编码方式的.我们继续跟进.查看Charset的defaultCharSet()方法.

[AppleScript] 纯文本查看 复制代码

从以上源码中我们不难看出,不出异常的情况下.默认编码是由file.encoding决定的.我们分别在main方法和Servlet中去获取file.encoding去测试一下.

[AppleScript] 纯文本查看 复制代码

输出结果是

[AppleScript] 纯文本查看 复制代码

在Servlet中的测试代码:

[AppleScript] 纯文本查看 复制代码

输出结果是:

[AppleScript] 纯文本查看 复制代码

getBytes()方法的默认编码确实是跟file.encoding一致的.file.encoding是由谁决定的呢?网上很多流传说是跟当前文件的编码格式相同.那我们测试一下.

在idea中我们讲文件的编码格式改成GBK.

fd4181b6e1b812b0229bb3b2d0b0e054.png

发现事与愿违.file.encoding依然是UTF-8的.也就是说file.encoding跟文件的编码没有任何关系.相同的代码.我们用命令行窗口去编译和运行.发现file.encoding竟然变成了GBK

[AppleScript] 纯文本查看 复制代码

我们讲Demo.java文件改成UTF-8编码格式的用 javac -encoding utf-8 Demo.java进行编译.然后运行发现file.encoding竟然没有变:

[AppleScript] 纯文本查看 复制代码

这说明file.encoding跟编译环境没有关系.只跟运行环境有关.我们尝试运行的时候指定file.encoding编码:

[AppleScript] 纯文本查看 复制代码

运行结果就是:

[AppleScript] 纯文本查看 复制代码

运行时将file.encoding指定成gbk

[AppleScript] 纯文本查看 复制代码

运行结果就是:

[AppleScript] 纯文本查看 复制代码

到此我们就知道了.Tomcat在启动的时候将file.encoding指定成了gbk.所以我们在Servlet中获取字节码数组的时候,默认用的就是gbk.

Tomcat是根据当前操作系统来设置file.encoding的值.我电脑是windows简体中问的.所以默认就是GBK的.

我们可以在catalina.bat中将file.encoding设置成utf-8.

[AppleScript] 纯文本查看 复制代码

重启Tomcat.再访问我们的Servlet.file.encoding就改成UTF-8的了.

5798c15b22ac4b4995ce0f5ad30e6369.png

至此,困扰我们的getBytes()默认编码格式问题就解决了.

更多免费技术资料可关注:annalin1203

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值