我正在使用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)
由于
答案 0 :(得分:2)
您XML
个文件缺少byte order mark。
在JDK 1.3中,如果使用UTF-16
,则为字节顺序标记is mandatory。如果您事先知道字节顺序是什么,请尝试UTF16-LE
或-BE
。
(在1.4.2及更高版本中,BOM不是强制性的。)
当然,如果您的文件根本不是UTF-16
,请使用正确的编码。请参阅上面的字符编码链接。除了一小组核心编码之外,支持的实际编码是实现定义的,因此您需要检查特定JDK的文档。
文件所在的编码应该位于文件的<xml>
标题中,例如:
<?xml version="1.0" encoding="THIS IS THE ENCODING YOU NEED TO USE"?>
如果文件采用单字符编码或UTF-8
(没有BOM),您可以尝试使用普通US-ASCII
读取第一行,它不应包含该范围之外的任何数据。解析编码字段,然后使用推导的编码重新打开文件。
这只有在您的平台明显支持实际编码时才有效。
BTW:JDK 1.3很古老。你确定那是你的版本吗? (除BOM表部分外,不会改变任何问题)答案 1 :(得分:0)
试试这段代码:
java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(path),"Windows-1256"));
br.readLine();