Java解决UTF-8 BOM问题

来源:互联网 发布:minitab软件15 编辑:程序博客网 时间:2024/05/16 17:03

    也许很多人在用dom4j操作xml的时候遇到过这样的问题“Content is not allowed in prolog”,以前我还真没遇到过,因为用的一直是Sun的JDK1.6,但如果用1.5以前的版本包括1.5或者非Sun的JDK,也许会碰到这种访问,用原始方式查看,比如命令行查看文件,会发现在它的内容最前面加了几个乱码,正是因为这个乱码导致xml无法解析,同样,如果是做其它的操作,可能也会因为这个乱码而导致异常,这其实是utf-8 BOM的问题,简单的来说就是String的字符在写入流的过程中采用的是utf-16的编码写入的,之所以采用utf-16是因为JVM在运行时采用的是utf-16,那是乱码其实是标识当前的文件编码是utf的意思,很多文本编辑器都对其做了处理,所以如果在比如linux下的gedit或者window的UE,看到的内容是好好的,但是一但用程序操作,便看到了那个小乱码,说白了,是对本文内容utf格式的一种标识导致了那个小乱码的出现,其实那个标识对于utf8格式来说可有可无,所以既然知道是本文标识导致的问题,那么解决也很解决,不要直接把文本String写入到文件中就好了,直接用byte写入,所以如果是经常用OutputStream直接操作byte写入文件的话,是不会遇到这个问题的,但如果是用Writer类直接把String写入文件则会出现这个问题,例:

    BufferedWriter writer = new BufferedWriter(out);

    writer.write("Hello World");

    改成:

    OutputStream out = new FileOutputStream(file);

    out.write("Hello World".getBytes());

这个问题就解决了,与其很多网上说怎么跳过那个小乱码进行操作,不如直接不让那个乱码出现,这样更直接,只是一个简单的getBytes()便可以改变。

    这也反映出了一个小技巧,那就是读文件对其内容进行操作时,建议用Reader,写文件时建议用OutputStream,当然这个问题在Sun的JDK1.6已经解决了,用什么也无所谓,如果大家关于这个问题还有什么看法与建议,欢迎交流

原创粉丝点击