论坛首页 Java版

用log4j發送EMAIL中文亂碼問題

浏览 5014 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2005-11-15
我用log4j發送EMAIL時﹐mail中的中文會變成問號??
以下是我的log4j.properties配置﹐不知道怎樣設置編碼﹖


# MAIL
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=WARN
log4j.appender.MAIL.BufferSize=1024
log4j.appender.MAIL.SMTPHost=www.mail.com
log4j.appender.MAIL.Subject=出錯啦
log4j.appender.MAIL.From=from@mail.com
log4j.appender.MAIL.To=to@mail.com
log4j.appender.MAIL.layout=org.apache.log4j.HTMLLayout
log4j.appender.MAIL.layout.LocationInfo=true
   
最后更新时间:2005-11-17
Pouyu 写道
我用log4j發送EMAIL時﹐mail中的中文會變成問號??
以下是我的log4j.properties配置﹐不知道怎樣設置編碼﹖


# MAIL
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=WARN
log4j.appender.MAIL.BufferSize=1024
log4j.appender.MAIL.SMTPHost=www.mail.com
log4j.appender.MAIL.Subject=出錯啦
log4j.appender.MAIL.From=from@mail.com
log4j.appender.MAIL.To=to@mail.com
log4j.appender.MAIL.layout=org.apache.log4j.HTMLLayout
log4j.appender.MAIL.layout.LocationInfo=true


把中文换成Unicode编码
   
0 请登录后投票
最后更新时间:2005-11-17
properties文件中只能存放ISO8859-1字符集中的字符, 存放中文是不能被读出的, 如果需要使用中文, 可以使用 native2ascii 命令处理 properties 文件.
   
0 请登录后投票
最后更新时间:2005-11-18
Airate 写道
glassprogrammer 写道
properties文件中只能存放ISO8859-1字符集中的字符, 存放中文是不能被读出的, 如果需要使用中文, 可以使用 native2ascii 命令处理 properties 文件.


开玩笑

说明理由吧, 否则有搅局之嫌哦.

当然作为一个文本文件你往properties文件中放中文是没问题的, 不过要知道这种文件一般会使用java.util.Properties来读取, 看看javadoc : http://java.sun.com/j2se/1.4.2/docs/api/java/util/Properties.html,
引用
When saving properties to a stream or loading them from a stream, the ISO 8859-1 character encoding is used. For characters that cannot be directly represented in this encoding, Unicode escapes  are used
   
0 请登录后投票
最后更新时间:2005-11-18
Airate 写道
诶,说啥呢  -_-#

好好想想,“只能”存放ISO8859-1字符集吗???

一大堆的\WQ%T^\#@$^%&\  那么好看?

很多种方法,
1。这个文件用utf-8编码,把jvm的encoding也设置成utf-8基本上就都没问题了,说“基本上”的原因在于常用字符没问题,那个很著名的 “联通”现象还是存在。

2。不改jvm也可以,读取这个文件的时候按照自己希望的encoding读进来不是也能实现嘛

除此以外还有很多方式,有时间翻javadoc,为什么就不能花点时间动脑筋去想想如何解决呢。


无语, 到此为止, 我不会再回了.

1.并非我不知道方法, 但是也需要遵循标准和惯例, javadoc里面已经说明Properties类会使用ISO8859-1编码来读取properties文件的, 请明确这个文件是供log4j来读取的, 不知道log4j知不知道 "jvm的encoding" 这个东东, 我想log4j会使用Properties类来读取log4j.properties文件;

2.我怀疑你没有用过native2ascii, 或者不知道在Ant里面也有这样的任务.

顺便看看 log4j 的源码: org.apache.log4j.PropertyConfigurator
引用
[code:1]public
  void doConfigure(String configFileName, LoggerRepository hierarchy) {
    Properties props = new Properties();
    try {
      FileInputStream istream = new FileInputStream(configFileName);
      props.load(istream);
      istream.close();
    }
    catch (IOException e) {
      LogLog.error("Could not read configuration file ["+configFileName+"].", e);
      LogLog.error("Ignoring configuration file [" + configFileName+"].");
      return;
    }
    // If we reach here, then the config file is alright.
    doConfigure(props, hierarchy);
  }[/code:1]
   
0 请登录后投票
最后更新时间:2005-11-22
首先感謝几位網友的回復。
我工作用的OS是BIG5的﹐所以JVM里的字符集MS950﹐并且由于一些原因還不能把JVM的字符集改為UTF-8。

如果是自己定義的message可以通過兩種方法解決﹕
1. 用native2ascii轉換為unicode放properties文件里。但是不好看。
2. 通過自己來編碼﹐如下﹕
[code:1]
Properties prop = new Properties();
prop.load(new FileInputStream("Message.properties"));
byte[] bytes = prop.getProperty("subject").getBytes("ISO-8859-1");
String subject = new String(bytes, "big5");
[/code:1]

但我目前的問題是JVM自身出現的異常信息中的中文會變成???
比如找不到Message.properties時﹐JVM會拋出FileNotFoundException﹐同時有一條message:系統找不到指定的檔案。這條message通過log4j發出來就變成????了.

我查閱了log4j的很多資料﹐好像無法從它來解決﹐似乎只能更改JVM的字符集了﹖
[/code]
   
0 请登录后投票
最后更新时间:2005-11-26
///1. 用native2ascii轉換為unicode放properties文件里。但是不好看。

仅仅是因为不好看就要这样瞎折腾,连改jvm的字符集的的烂办法都想出来???

用xml作配置文件,p事都没有了.
   
0 请登录后投票
最后更新时间:2005-11-26
本来非常简单的事情,还扯上了动脑筋?????

java.util.Properties的源代码里写的很清楚:
        BufferedReader in = new BufferedReader(new InputStreamReader(inStream, "8859_1"));


照你意思,干嘛不直接改一下jdk的源代码呢???



Airate 写道
诶,说啥呢  -_-#

好好想想,“只能”存放ISO8859-1字符集吗???

一大堆的\WQ%T^\#@$^%&\  那么好看?

很多种方法,
1。这个文件用utf-8编码,把jvm的encoding也设置成utf-8基本上就都没问题了,说“基本上”的原因在于常用字符没问题,那个很著名的 “联通”现象还是存在。

2。不改jvm也可以,读取这个文件的时候按照自己希望的encoding读进来不是也能实现嘛

除此以外还有很多方式,有时间翻javadoc,为什么就不能花点时间动脑筋去想想如何解决呢。
   
0 请登录后投票
最后更新时间:2005-12-23
服了某位同学了 典型的化简为繁自以为是......工作中碰到此类人事 我一般都绕道而行......
   
0 请登录后投票
最后更新时间:2006-05-11
怎么不总结一下,虾客们
   
0 请登录后投票
论坛首页 Java版

跳转论坛:
JavaEye推荐