DarkMatter in Cyberspace
  • Home
  • Categories
  • Tags
  • Archives

Apache commons-io的字符串编解码问题


用Apache org.apache.commons.io.input.Tailer监控日志文件变化很方便,但如果文件中有中文,回调函数TailerListener.handle中参数line是乱码,原因是目前的Tailer是按“西欧语言”(ISO8859-1)对日志文件进行解码的,而日志文件一般是用GBK或者UTF-8编码。解决方法是对line用ISO8859-1再进行一次编码得到原始的字节数组,然后用日志文件的格式进行解码,这样最终得到的字符串就OK了。实现方法如下:

服务类:

...

LogMonitorListener lml = new LogMonitorListener();

Tailer lmt = new Tailer(logfile, lml, 3000);

...

lmt.run();

监听器类:

public class LogMonitorListener extends TailerListenerAdapter {

...

@Override

public void handle(String line) {

msg = new String(line.getBytes("ISO8859-1"), "GBK") ; //用来处理GBK格式的日志

msg = new String(line.getBytes("ISO8859-1"), "UTF-8") ; //用来处理UTF-8格式的日志

...



Published

May 28, 2012

Last Updated

May 28, 2012

Category

Tech

Tags

  • decoding 1
  • encoding 8
  • string 3

Contact

  • Powered by Pelican. Theme: Elegant by Talha Mansoor