package org.fanhongtao.tools.misc;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import org.apache.commons.lang.StringUtils;
/**
* 实现将短信的UNL数据中的 UNICODE 编码后的字符转换成可见的字符
* @author Fan Hongtao
* @created 2008-10-23
*/
public class ShortMsgUnicodeDecoder
{
/**
* @param args
*/
public static void main(String[] args)
{
new ShortMsgUnicodeDecoder().run();
}
private void run()
{
try
{
BufferedReader in = new BufferedReader(new FileReader("input.unl"));
String line;
while ((line = in.readLine()) != null)
{
decode(line);
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
private void decode(String line)
{
// String fields[] = line.split("\0x7c");
// String fields[] = StringUtils.splitPreserveAllTokens(line, '|');
String fields[] = StringUtils.split(line, '|');
// System.out.println("Field's num is " + fields.length);
for (int i = 0; i < fields.length; i++)
{
// System.out.println(fields[i]);
String str = fields[i];
if (!str.startsWith("``"))
{
System.out.println(str);
continue;
}
// decode
String input = str.substring(2, str.length() - 2);
// System.out.println(str);
StringBuffer sb = new StringBuffer();
for (int j = 0; j < input.length(); j = j + 4)
{
String charStr = input.substring(j, j + 4);
int intValue = Integer.parseInt(charStr, 16);
char ch = (char) intValue;
sb.append(ch);
}
System.out.println(sb.toString());
}
}
}