在最近做审查系统相关模块时,由于是有程序去调用javac来进行文件的编译和ftp上传,老是遇到java乱码的问题,搞的很郁闷,一开始总是想着去调系统的环境变量,调来调去,最后想想,这样的程序起不是太不具有通用性了,完全依赖系统,也跟java的初衷有被,于是想着去在程序方面改动.
一. 如果想从系统环境变量设置方面入手,可以使用下面程序先检测系统的环境变量设置情况:
package com.gztelecom;
import java.util.*;
import java.text.*;
/**
* 目的:显示环境变量和JVM的缺省属性
* 输入:无
* 输出:1 支持的LOCALE
* 2 JVM的缺省属性
*/
public class Env
{
/**
* main entrance
*/
public static void main(String[] args)
{
System.out.println("Hello, it's: " + new Date());
//print available locales
Locale list[] = DateFormat.getAvailableLocales();
System.out.println("======System available locales:======== ");
for (int i = 0; i < list.length; i++)
{
System.out.println(list[i].toString() + "\t" + list[i].getDisplayName());
}
//print JVM default properties
System.out.println("======System property======== ");
System.getProperties().list(System.out);
}
}
二. 修改系统环境变量
以solaris 为例,修改 /.profile ,使用LANG=zh_CN.GB18030
export LANG
三,修改程序启动脚本 注意字体红色部分
#!/bin/bash
#Use this script to start SyncManager standalone application!
LC_ALL=zh_CN.GB2312
export LC_ALL
LC_CTYPE=zh_CN.GB2312
export LC_CTYPE
LC_NUMERIC=zh_CN.GB2312
export LC_NUMERIC
LC_TIME=zh_CN.GB2312
export LC_TIME
LC_COLLATE=zh_CN.GB2312
export LC_COLLATE
LC_MONETARY=zh_CN.GB2312
export LC_MONETARY
LC_MESSAGES=zh_CN.GB2312
export LC_MESSAGES
LANG=zh_CN.GB2312
export LANG
locale
cd /home/checkup/WEB-INF/bin
#STEP 1 : set the classpath
separator=":"
classpath=/home/checkup/WEB-INF/classes
for i in /home/checkup/WEB-INF/lib/*
do
classpath=$classpath$separator$i
done
#STEP 2 : start the application
echo $classpath
JAVA_EXEC="/j2sdk1.4.2_13/bin/java -Dfile.encoding=GB2312 -cp $classpath com.gztelecom.CheckupSystemHandler"
nohup $JAVA_EXEC &
#$JAVA_EXEC