jdk 1.3中java unicode编码文件读取问题

标签 java

我使用的是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/

相关文章:

java - Java 中 System.out.println 的奇怪行为

java - Spring Boot IllegalStateException ArchiveDescriptor 重用; URL 可以多次处理吗?

java - 如何在java桌面应用程序中设置 Crystal 报表参数

使用操作数堆栈和局部变量可视化进行 Java 字节代码调试?

java - 将java中的文件复制到可能不存在的目录

java - 请帮我理解这段代码

java - 通用类型列表的 Getter(作为参数传递)

java - 从 requestContext 获取完整路径 RESTEasy3.0.7 PreRequestFilter for Security in JAVA

java - 我应该用什么来爬取许多新闻文章?

java - 比较器抛出奇怪的 ClassCastException : pkg. MyClass cannot be cast to pkg.MyClass