编码问题: file.encoding

今天遇到一个神奇的问题,微信小程序不允许直接把用户信息发送到后台,而是发送加密数据,到后台根据session_key解码后获得,问题就出现在这。

写了一个静态的解码类方法,在Controller里面调用,解码后就会返回一个中文是乱码的结果,而用同样的参数在解码类里的main中运行,就不会乱码,真是奇了怪了,百思不得其解,百度上也没有相关的问题,大都是传输时的编码问题,但我这明明相同的参数,甚至不传参数,得到的结果也有乱码。

无奈之下,请教大佬,真是一语道破,在java web中,String 根据上下文来决定编码格式,在Controller中的编码与直接运行时的编码不一样,就导致了区别。在解码时指定编码格式就解决了。

 

那之前在两个地方调用结果不同,就是因为两个地方的默认编码不同,

使用System.getProperty("file.encoding")   可以得到当前的默认编码,果然不是utf-8, 而是GBK

然后学着看了看源码,一步一步找到了file.encoding 的根源

如果没有指定file.encoding,则使用UTF-8,指定了则使用指定的,通过System.setProperty("file.encoding", "utf-8")可以指定当前编码为utf-8