Java解决UTF-8 BOM问题
2010-11-30 12:13
435 查看
也许很多人在用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已经解决了,用什么也无所谓,如果大家关于这个问题还有什么看法与建议,欢迎交流
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格式txt文件第一行出现乱码——问号“?”及解决;Java读带有BOM的UTF-8文件乱码原因及解决方法
- 读取文本出现 锘 * 系列乱码错误(UTF-8 BOM问题)的原因及解决方法
- JAVA ,SSH中文及其乱码问题的解决 6大配置点 使用UTF-8编码
- java 解决异常 2 字节的 UTF-8 序列的字节2 无效的问题
- 解决CodeSmith代码模版输出文件的编码格式为有bom的UTF-8的问题
- Java读取UTF-8格式文件第一行出现乱码——问号“?”及解决 And Java读带有BOM的UTF-8文件乱码原因及解决方法
- 解决动态编译的时候带bom头的java不编译问题
- Java读取UTF-8格式txt文件第一行出现乱码——问号“?”及解决;Java读带有BOM的UTF-8文件乱码原因及解决方法
- 解决Java中MD5加密utf-8格式时与其他语言不同的问题
- Java读取UTF-8格式txt文件第一行出现乱码——问号“?”及解决;Java读带有BOM的UTF-8文件乱码原因及解决方法
- Java读取带有BOM的UTF-8文件乱码原因及解决办法
- java 以utf-8生成csv文件,用excel打开乱码问题解决
- Java读取UTF-8格式txt文件第一行出现乱码——问号“?”及解决;Java读带有BOM的UTF-8文件乱码原因及解决方法
- Java读带有BOM的UTF-8文件乱码原因及解决方法
- java和jsp中文编码问题的解决方法(ISO8859_1、GBK、UTF-8)
- Java读取UTF-8格式文件第一行出现乱码——问号“?”及解决 And Java读带有BOM的UTF-8文件乱码原因及解决方法
- Warning Cannot send session cookie - headers already sent...问题的解决(PHP的UTF-8 BOM引起的问题)
- JAVA ,SSH中文及其乱码问题的解决 6大配置点 使用UTF-8编码
- Java读取UTF-8格式txt文件第一行出现乱码——问号“?”及解决;Java读带有BOM的UTF-8文件乱码原因及解决方法