tomcat之坑:指定jvm的编码

背景

在项目中需要调用 小程序开发提供的http api,在web端将数据写入小程序的云数据库,但是代码单元测试在idea上没问题。正常写入。但是将项目部署在tomcat上面发现写入数据失败,错误码 47001,即请求体解析失败,请求体的格式出错,于是怀疑是编码导致的问题

尝试过的方法
    PrintWriter out=new PrintWriter(connection.getOutputStream());
    JSONObject jsonObject=new JSONObject();
    jsonObject.put("env",yunId);
    jsonObject.put("query",query);
     //神奇操作
    String s=new String(jsonObject.toJSONString().getBytes("UTF-8"));
    out.write(s);
        connection.setRequestProperty("Accept-Charset","UTF-8");
        connection.setRequestProperty("Content-Type","application/json;charset=UTF-8");

和无数次的运行,运行,运行。。。。。。。

最终寻找解决办法的过程中无意看到 tomcat 指定 jvm的编码格式。豁然开朗,具体方法如下
  • 首先 在你的运行环境下查看你的 jvm编码格式

     	System.getProperty("file.encoding")
    
  • 根据实际项目的需要,修改catalina.bat文件配置

     	加入 :set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8
    

注意你加入的位置:

goto doneEndorsed
:noEndorsedVar
if not exist "%CATALINA_HOME%\endorsed" goto doneEndorsed
set ENDORSED_PROP=java.endorsed.dirs
:doneEndorsed
set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8

rem ----- Execute The Requested Command ---------------------------------------

自此更改完毕。一天的崩溃给了让我长了记性,编码很重要。在整个项目中的从运行环境到输入输出,字节到字符,等等的编码的方式一定要注意注意再注意。

你可能感兴趣的:(tomcat)