问题:
项目在本机开发编译打包后发布到法国的服务器,代码中的中文全部乱码,就算是最简单的代码System.out.println("中文"),打印出来的也是乱码。
代码在本地的服务器测试都正常。
法国服务器的环境:window 2003 中文版。
解决:
在网友imasmallbird的指引下,发现是2个服务器的file.encoding的不同,本地服务器是GBK,而法国服务器是Cp1252,所以会产生乱码。
把法国服务器的区域设置改成中国后,file.encoding就变成GBK,这样可以解决这个问题,但因为很多原因不能直接改区域设置,比如改了区域设置后时间就不是法国时间。
目前解决办法如下:
1. 本地编译打包不用变,本地编译采用的是GBK编译的(默认采用系统字符集编译)
2. 在法国服务器的tomcat上加上JAVA的启动参数 -Dfile.encoding=GBK
重启tomcat,一切正常了。
解决了该问题后,顺便找了些JAVA的中文乱码的资料看了下,简单的总结下:
从Java 源代码到得到正确的结果,要经过 “Java 源代码-> Java 字节码-> 虚拟机->操作系统->显示设备”的过程。在上述过程中的每一步骤,我们都必须正确地处理中文的编码,才能够使最终显示正确的结果。
"Java 源代码-> Java 字节码":该阶段就是调用javac 进行编译的阶段,javac默认采用系统字符集,比如我们本地机器急就是GBK,如果想用其他的编码,比如UTF-8,可以加上 -encoding UTF-8
"Java 字节码-> 虚拟机->操作系统" :该阶段首先需要JRE或者JDK支持多语言(下载JRE的时候会让你选择英文版还是多语言版),然后就是虚拟机启动的时候使用什么字符集,默认也是采用 当前系统的字符集,如需要修改字符集,加上JAVA的启动参数,-Dfile.encoding=GBK
"操作系统->显示设备":该阶段主要就是需要操作系统支持显示中文就可以,就是安装了中文字体。
看到这里后重新看我们的乱码问题,我们在本地编译(Java 源代码-> Java 字节码 阶段)默认采用了GBK字符集,而"Java 字节码-> 虚拟机->操作系统" 阶段是在法国服务器上进行,也是采用了默认的字符集,但这里的默认字符集确实Cp1252,因字符集不一致,所以就会乱码。
System.getProperty("file.encoding") 得到当前系统字符集
content.getBytes(System.getProperty("file.encoding")),"GBK") 通过当前字符集转码
来源:http://hi.baidu.com/sxhyll/blog/item/3f234ab1b1514e5f0823022e.html
相关推荐
CATALINA_OPTS="-Dfile.encoding=UTF8 ${CATALINA_OPTS}" ``` - 重启Confluence服务以使更改生效。 #### 四、小工具乱码或不可用 **问题描述**:Confluence中的小工具出现乱码或无法正常使用的情况。 **解决...
- 在`web.xml`中注册这个过滤器,并配置初始化参数`encoding`为`UTF-8`,这样所有经过该过滤器的请求都会被设置为UTF-8编码。 ```xml <filter-name>SetCharacterEncodingFilter</filter-name> <filter-class>...
-Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en ``` 这些参数告诉JVM使用UTF-8编码,并设定用户的国家和地区为美国,以确保相关本地化字符串也以UTF-8处理。 2. **设置工作空间编码**: - 启动...
这段配置包含了几个关键的Java属性,如`-Djava.awt.headless=false`确保非无头模式运行,`-Dfile.encoding=UTF-8`设置字符编码为UTF-8,以及`-Dsun.awt.fontCONFIG.enabled=true`和`-Djava.awt.fonts=/usr/share/...
了解和正确使用-Xbootclasspath参数是Java开发者进阶的必备技能之一,尤其是在大型企业级应用和复杂的开发环境中,调整JVM参数往往能带来显著的性能提升。同时,这也涉及到对Java内存模型、垃圾回收机制以及类加载...
- **解决方案**: 在过滤器中设置`request.setCharacterEncoding("UTF-8")`,确保所有POST数据都能被正确处理。 **3. 页面链接中传递中文参数** - **问题**: 页面链接中包含中文参数时,由于浏览器默认编码方式与...
<jvmArguments>-Dfile.encoding=UTF-8 这将设置Maven插件的字符编码为UTF-8,解决乱码问题。 三、示例代码 以下是一个简单的示例代码,演示如何在SpringBoot项目中解决乱码问题: @RestController ...
综上所述,通过正确设置`file.encoding`参数为UTF-8,可以在很大程度上解决由字符编码不一致导致的中文乱码问题。同时,开发者还应注意在修改配置前进行充分的准备和测试工作,确保系统的稳定性和兼容性。
其中,`-Dfile.encoding=UTF-8`是关键,它指定Java虚拟机使用UTF-8字符编码,从而确保输出内容正确显示中文。 2. **配置项目使用容器参数**: 如果你的项目是通过容器(如Tomcat)运行,还需要在容器的配置中指定...
在IntelliJ IDEA中,你可以通过编辑Tomcat配置来添加 `-Dfile.encoding=UTF-8` 参数。打开Run/Debug Configurations,选择你的Tomcat服务器配置,然后在VM options栏添加这个参数。 3. **修改文档编码**: 在...
- `-Dfile.encoding=GBK`:设置文件编码为GBK。 - `-Duser.language=Zh`:设置用户的语言环境为中国语。 - `-Duser.region=CN`:设置用户的地域为中国。 例如,在`startweblogic.sh`文件中,这些参数可以被...
- **-Dfile.encoding=UTF-8**:设置文件系统的字符编码,这对于读写文件时非常关键。 - **-Duser.language=zh -Duser.country=CN**:设置用户的语言和地区,这对于国际化的应用尤为重要。 - **-Djava.util.logging....
这里,`-options`可以是各种JVM参数,例如内存设置 `-Xms` 和 `-Xmx`,`className` 是程序的主类名,`jarFile` 是打包的`.jar`文件名,`args...` 是传递给主类的参数。 总之,`java.exe`和`javaw.exe`的选择取决于...
同样地,将此参数设置为`GBK`可以确保文件中的中文字符被正确处理。 3. **`-Duser.language`**:设置用户的首选语言。将其设置为`zh`(代表中文),可以告诉JVM当前环境的主要语言是中文,从而在需要时加载相应的...
首先,我们需要修改IDEA的启动参数来指定正确的文件编码。IDEA的安装路径通常在`bin`目录下,找到`idea64.exe.vmoptions`文件(如果你使用的是32位系统,则应查找`idea.exe.vmoptions`)。使用文本编辑器打开这个...
这个属性的值可以在JVM启动时通过命令行参数 `-Dfile.encoding="charset_name"` 来设定,其中`charset_name`是想要使用的字符集名称。如果没有显式设置,JVM会使用操作系统的默认字符集。 在Java代码中,我们可以...
4. **JVM字符集设置**:在启动Java虚拟机(JVM)时,可以使用`-Dfile.encoding=UTF-8`参数设定默认编码为UTF-8。 5. **数据库表和列的字符集**:确保数据库表和列的字符集也能够支持中文。可以通过创建表时指定或...
这里的`JAVA_OPTS`环境变量用于设置Java虚拟机(JVM)的启动参数。`-Dfile.encoding=UTF-8`指示JVM使用UTF-8编码处理文件,包括日志输出;`-Dsun.jnu.encoding=UTF-8`则是设置JNI(Java Native Interface)使用的...
6. **JVM设置**:确保Java虚拟机(JVM)的默认编码也是UTF-8,这可以通过在启动JVM时添加`-Dfile.encoding=UTF-8`参数实现。 除了上述方法,有时问题可能出在编译后文件上。"DDLTask.rar"这个压缩包可能包含了用于...