我使用的是blackberry平台的jdk1.3。现在,当我尝试读取 Unicode 编码的 xml 文件时遇到问题。
我的代码:
java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(path),"UTF16"));
br.readLine();
错误:
sun.io.MalformedInputException: Missing byte-order mark
at sun.io.ByteToCharUnicode.convert(ByteToCharUnicode.java:123)
at java.io.InputStreamReader.convertInto(InputStreamReader.java:137)
at java.io.InputStreamReader.fill(InputStreamReader.java:186)
at java.io.InputStreamReader.read(InputStreamReader.java:249)
at java.io.BufferedReader.fill(BufferedReader.java:139)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
谢谢
最佳答案
你XML
文件缺少 byte order mark .
在 JDK 1.3 中,字节顺序标记 is mandatory如果您使用 UTF-16
。尝试UTF16-LE
或-BE
如果您事先知道字节序是什么。
(BOM在1.4.2及以上版本中不是强制性的。)
当然,如果你的文件不是UTF-16
无论如何,使用正确的编码。请参阅上面的字符编码链接。除了一小部分核心编码之外,支持的实际编码是实现定义的,因此您需要检查特定 JDK 的文档。
文件的编码应该在 <xml>
中文件头,例如:
<?xml version="1.0" encoding="THIS IS THE ENCODING YOU NEED TO USE"?>
如果文件采用单字符编码,或 UTF-8
(没有 BOM),您可以尝试使用普通 US-ASCII
阅读第一行,它不应包含该范围之外的任何数据。解析编码字段,然后使用推导的编码重新打开文件。
只有当您的平台明显支持实际编码时,这才有效。
顺便说一句:JDK 1.3 已经很古老了。你确定这是你的版本吗? (除了 BOM 部分之外,无论如何都不会改变问题的任何内容)
关于jdk 1.3中java unicode编码文件读取问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5692136/