日期:2014-05-16  浏览次数:20993 次

unix环境下写文件内容出现乱码,该如何处理?
Windows编码方式:GBK
Hp-unix编码方式:EUC_CN


<%
try   {
String   path   =   System.getProperties().getProperty( "LOGPATH ")   +   "cpmis_demo.log ";
String   sMsg   =   "你好吗?dsfadsafd我很好,你了?邱喆邱喆邱喆邱喆邱喆邱喆邱喆 ";
out.println(path);
FileWriter   logfile   =   new   FileWriter(path,   true);
String   sysEncode   =   logfile.getEncoding();
out.println( " <br/> <br/> <br/> <br/> ");
out.println(logfile.getEncoding());

logfile.write( "\r\n   1=> ");
logfile.write(new   String(sMsg.getBytes(sysEncode), "ISO8859_1 "));
logfile.write( "\r\n   2=> ");
logfile.write(new   String(sMsg.getBytes(sysEncode), "utf-8 "));
logfile.write( "\r\n   3=> ");
logfile.write(new   String(sMsg.getBytes(sysEncode), "GB2312 "));
logfile.write( "\r\n   4=> ");
logfile.write(new   String(sMsg.getBytes(sysEncode), "GBK "));
logfile.write( "\r\n   5=> ");
logfile.write(new   String(sMsg.getBytes(sysEncode), "EUC_CN "));


logfile.flush();
logfile.close();
}   catch   (Exception   e)   {
strUtils.WriteLog(e.toString());
}   finally   {
}
%>


==================
为什么,往日志文件里面写内容, "喆 "字会乱码?该如何解决?谢谢!!

=================
服务器是hp-unix,weblogic

=================
1=> ????????dsfadsafd???????????????????????????????????

  2=> ?????dsfadsafd??????????????????????????????

  3=> 你好吗?dsfadsafd我很好,你了?邱?邱?邱?邱?邱?邱?邱?

  4=> 你好吗?dsfadsafd我很好,你了?邱?邱?邱?邱?邱?邱?邱?

  5=> 你好吗?dsfadsafd我很好,你了?邱?邱?邱?邱?邱?邱?邱?



------解决方案--------------------
发错地方了吧,这是Java问题,虽然说他跑在Unix上,但Java号称跨平台呀。
我也做过一点Java,
sysEncode和你那行字: "你好吗?dsfadsafd我很好,你了?邱喆邱喆邱喆邱喆邱喆邱喆邱喆 "
的输入编码不一致,下面的写文件的时候,就相当于将那行文字的编码,用sysEncode编码转成你在new String(sMsg.getBytes(sysEncode), "utf-8 ")里写的编码。不兼容的字符就是乱码。

sysEncode不能用logfile.getEncoding---这个可能会取到LANG或LC_CTYPE的编码,而是用和输入那行字时所用输入法的编码方式一致的编码。
如果logfile.getEncoding和那行字本来的编码一致,你就不需要转换。
------解决方案--------------------
用VI看看程序