0

我正在开发一个使用 Web 服务的 Java 应用程序。Web 服务是使用 SAP 服务器创建的,该服务器以 Unicode 自动对数据进行编码。我从 Web 服务中得到一个 Unicode 字符串。

《咩ㄭ㌮ਊふづ쿓漠漠਍圯぀湁湅楳楳楤湍湥潣๩഼਍》‰扯扯㰽ぉ഼┪敄灉⁥쿓呓啃䕈汤⁴佉牯潴浅数慌杮䔵输入祔数⼠漼摮਍汇扵瑵瑮਍汇扵祔慂敳潆瑱入⼴浠潃牵敩ൊ'关浅数うう㄰਍䔯据牵祴浅数摮扯൪㐊〠༒所ਘ⍍㰰〠丌严㍍㰰〠〰严㍍㰱2"

以上是回应。

我想将它转换为像字符串这样的可读文本格式。我正在使用核心 Java。

4

3 回答 3

2

呱㌮ਥഥ쿄ㄭ㌮ਵ쿊ㄭ㌮ਉづ쿈ී਍圹楠楳湅朹楤楳湅湅扥ࠀ楤杮湥润ࠀ഼杮湥扽ࠀ䴼杮ュ湥润വ഼പㄭ敄灹剉崵呼づ࿪敄灹剐剌⁥쿈呓呓䰰䕕䕕䕕䕉慭杮䔠ൎ入祔数⼠潆瑼਍汇扵祴数⼠潆瑑祔扵祴数റ⼠入慂敳潆瑮入据慂敳潆瑮摮摮๥瑧‵‰൰ล൭ 〯‱湍㰼਍丏๥瑧‵‰൰๥൭ 〠〯‱湊丱⸱2

那是一个被解释为 UTF-16LE 的 PDF 文件。

您需要查看接收响应的组件以及它如何处理输入以阻止将其解码为 UTF-16LE,但最终没有这样的“可读”版本,因为它是二进制文件。从 PDF 文件中提取文档文本是一个更大的问题!

(注意:Unicode 是一个字符集,UTF-16LE 是将该集编码为字节。由于历史事故,Microsoft 将 UTF-16LE 编码称为“Unicode”,但这是一种误导。)

于 2012-07-11T21:50:28.207 回答
0

如果你有byte[]一个或一个InputStream(两个二进制数据),你可以得到一个String或一个Reader(两个文本):

final String encoding = "UTF-8"; // "UTF16LE" or "UTF-16BE"

byte[] b = ...;
String s = new String(b, encoding);

InputStream is = ...;
BufferedReader reader = new BufferedReader(new InputStreamReader(is, encoding));
for (;;) {
    String line = reader.readLine();
}

反向过程使用:

byte[] b = s.geBytes(encoding);
OutputStream os = ...;

BufferedWriter writer = new BufferedWriter(new OuputStreamWriter(os, encoding));
writer.println(s);

Unicode 是所有字符的编号系统。UTF 变体将 Unicode 实现为字节。


你的问题:

在正常方式(网络服务)中,您已经收到了一个String. 例如,您可以使用上面的 Writer 将该字符串写入文件。要么使用完整的 Unicode 字体自行检查,要么将文件传递给检查。

您需要 (?) 检查文本所在的 UTF 变体。对于亚洲文字,UTF-16(小端或大端)是最佳选择。在 XML 中,它已经被定义了。


添加:

FileWriter使用默认编码(来自您机器上的操作系统)写入文件。而是使用:

new OutputStreamWriter(new FileOutputStream(new File("...")), "UTF-8")

如果它是二进制 PDF,正如@bobince 所说,只在 byte[] 或 InputStream 上使用 FileOutputStream。

于 2012-07-10T14:11:21.133 回答
0

这绝对不是一个有效的字符串。这看起来像损坏的 UTF-16。

更新

事实上@Bobince 是对的,这是一个以 UTF-16显示的 PDF 文件(很可能是 UTF-8 / 或纯 ASCII) 。当以 UTF-8 显示时,此字符串确实显示了 PDF 源代码。接得好。

于 2012-07-13T09:25:07.827 回答