编码特殊字符java

时间:2016-12-06 05:03:04

标签: java encoding utf-8 stringescapeutils

我正在尝试修复我编写的将srt文件转换为dxfp.xml的代码中的错误。它工作正常但是当有一个特殊字符如&符号时会抛出java.lang.NumberFormatException错误。我尝试使用apache commons中的StringEscapeUtils函数来解决它。有人可以向我解释一下我在这里失踪了吗?提前谢谢!

public class SRT_TO_DFXP_Converter {
File input_file;
File output_file;
ArrayList<CaptionLine> node_list;

public SRT_TO_DFXP_Converter(File input_file, File output_file) {
    this.input_file = input_file;
    this.output_file = output_file;
    this.node_list = new ArrayList<CaptionLine>();
}

class CaptionLine {
    int line_num;
    String begin_time;
    String end_time;
    ArrayList<String> content;

    public CaptionLine(int line_num, String begin_time, String end_time,
            ArrayList<String> content) {
        this.line_num = line_num;
        this.end_time = end_time;
        this.begin_time = begin_time;
        this.content = content;
    }

    public String toString() {
        return (line_num + ": " + begin_time + " --> " + end_time + "\n" + content);
    }
}

private void readSRT() {

    BufferedReader bis = null;
    FileReader fis = null;
    String line = null;
    CaptionLine node;
    Integer line_num;
    String[] time_split;
    String begin_time;
    String end_time;

    try {
        fis = new FileReader(input_file);
        bis = new BufferedReader(fis);          
        do {
            line = bis.readLine();
            line_num = Integer.valueOf(line);               
            line = bis.readLine();
            time_split = line.split(" --> ");
            begin_time = time_split[0];
            begin_time = begin_time.replace(',', '.');
            end_time = time_split[1];
            end_time.replace(',', '.');
            ArrayList<String> content = new ArrayList<String>();

            while (((line = bis.readLine()) != null)
                    && (!(line.trim().equals("")))) {

                content.add(StringEscapeUtils.escapeJava(line));

                //if (StringUtils.isEmpty(line)) break;

            }
            node = new CaptionLine(line_num, begin_time, end_time, content);
            node_list.add(node);

        } while (line != null);
    } catch (Exception e) {
        System.out.println(e);
    }

    finally {
        if (bis != null) {
            try {
                bis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (fis != null) {
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

private String convertToXML() {
    StringBuffer dfxp = new StringBuffer();
    dfxp.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<tt xml:lang=\"en\" xmlns=\"http://www.w3.org/2006/04/ttaf1\"  xmlns:tts=\"http://www.w3.org/2006/04/ttaf1#styling\">\n\t<head>\n\t\t<styling>\n\t\t\t<style id=\"1\" tts:backgroundColor=\"black\"  tts:fontFamily=\"Arial\" tts:fontSize=\"14\" tts:color=\"white\" tts:textAlign=\"center\" tts:fontStyle=\"Plain\" />\n\t\t</styling>\n\t</head>\n\t<body>\n\t<div xml:lang=\"en\" style=\"default\">\n\t\t<div xml:lang=\"en\">\n");

    for (int i = 0; i < node_list.size(); i++) {
        dfxp.append("\t\t\t<p begin=\"" + node_list.get(i).begin_time + "\" ")
            .append("end=\"" + node_list.get(i).end_time
                + "\" style=\"1\">");
        for (int k = 0; k < node_list.get(i).content.size(); k++) {
            dfxp.append("" + node_list.get(i).content.get(k));
        }
        dfxp.append("</p>\n");
    }
    dfxp.append("\t\t</div>\n\t</body>\n</tt>\n");
    return dfxp.toString();


}

private void writeXML(String dfxp) {
    BufferedWriter out = null;
    try {
        out = new BufferedWriter(new FileWriter(output_file));
        out.write(dfxp);
        out.close();
    } catch (IOException e) {
        System.out.println("Error Writing To File:"+ input_file +'\n');
        e.printStackTrace();
    } finally {
        if (out != null) {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

public static void main(String[] args) {
    if ((args.length < 2) || (args[1].equals("-h"))) {
        System.out.println("\n<---   SRT to DFXP Converter Usage   --->");
        System.out
                .println("Conversion: java -jar SRT_TO_DFXP.jar <input_file> <output_file> [-d]");
        System.out
                .println("Conversion REQUIRES a input file and output file");
        System.out.println("[-d] Will Display XML Generated In Console");
        System.out.println("Help: java -jar SRT_TO_DFXP.jar -h");
    } else if (!(new File(args[0]).exists())) {
        System.out.println("Error: Input SubScript File Does Not Exist\n");
    } else {
        SRT_TO_DFXP_Converter converter = new SRT_TO_DFXP_Converter(
                new File(args[0]), new File(args[1]));
        converter.readSRT();
        String dfxp = converter.convertToXML();
        if ((args.length == 3) && (args[2].equals("-d")))
            System.out.println("\n" + dfxp + "\n");
        converter.writeXML(dfxp);
        System.out.println("Conversion Complete");
    }
}

这是srt文件的一部分,它在导出并作为jar文件运行时抛出错误。

1
00:20:43,133 --> 00:20:50,599
literature and paper by Liversmith & Newman, and I think the point is well made that a host of factors 

0 个答案:

没有答案