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已经解决了,用什么也无所谓,如果大家关于这个问题还有什么看法与建议,欢迎交流
- Java解决UTF-8 BOM问题
- Java解决UTF-8的BOM问题
- UTF-8的BOM问题
- UTF-8的BOM问题
- UTF-8的BOM问题
- UTF-8的bom问题
- UTF-8签名(BOM)问题
- UTF-8、BOM、<feff>的问题
- UTF-8、BOM、<feff>的问题
- UTF-8编码中的BOM问题
- vim utf-8 bom设置的问题
- UTF-8、BOM、<feff>的问题
- erlang 读取utf-8 BOM 问题
- EditPlus注册码在线生成,删除utf-8BOM,完美解决php文件乱码问题
- 替换Java文件的utf-8 BOM
- java utf-8文件处理bom头
- UTF-8和UTF-8+BOM的问题
- 关于UTF-8与UTF-8+BOM的问题
- GridView内容详解(转载)
- tomcat catalina.out日志按日切割
- 请人吃饭
- Configuring raw devices (multipath) for Oracle Clusterware 10g Release 2 (10.2.0) on RHEL5-OEL5 [ID 564580.1]
- 自己动手实现Crash时候Dump.
- Java解决UTF-8 BOM问题
- poj 1328
- C++中的四种强制类型转换的区别
- PKIX path building failed 的问题
- 如何对窗体进行打印预览 (Visual C#)
- Filter的实际应用
- 您刚刚注册CSDN,或者修改了您的Email地址,请马上登录邮箱,激活您的帐号;
- Question 16: Which of the following methods can a developer use to override the default terminate() function in C++?