我正在开发一个Java应用程序,我正在使用Web服务。 Web服务使用SAP服务器创建,该服务器以Unicode自动编码数据。我从Web服务中获取了一个Unicode字符串。
” 倥䙄ㄭ㌮쿣ී㈊〠漠椭圯湩湁楳湅潣楤杮湥润椭“‰扯4㰊഼┊敄瑶灹佐呓'†䘠汤⁴佃剕䕉⁒渠牯慭慌杮䔠ൎ⼊祔数⼠潆瑮汇扵祴数⼠祔数റ⼊慂敳潆瑮⼠潃牵敩൲⼊慎敭⼠う䔯据挚湩'‰㸊ാ攊摮扯4㐊〠漠椭㰼䰯湥瑧`‰㸊ാ猊牴慥7䘯〰‱⸱2 “
以上就是回应。
我想将其转换为可读的文本格式,如String。我使用的是核心Java。
答案 0 :(得分:2)
倥䙄ㄭ㌮쿣ී㈊〠漠椭圯湩湁楳湅潣楤杮湥润椭“‰扯4㰊഼┊敄瑶灹佐呓'†䘠汤⁴佃剕䕉⁒渠牯慭慌杮䔠ൎ⼊祔数⼠潆瑮汇扵祴数⼠祔数റ⼊慂敳潆瑮⼠潃牵敩൲⼊慎敭⼠う䔯据挚湩'‰㸊ാ攊摮扯4㐊〠漠椭㰼䰯湥瑧`‰㸊ാ猊牴慥7䘯〰‱⸱2
这是一个被解释为UTF-16LE的PDF文件。
您需要查看哪个组件正在接收响应以及它如何处理输入以阻止它被解码为UTF-16LE,但最终还没有它的“可读”版本,因为它是二进制文件。从PDF文件中提取文档文本是一个更大的问题!
(注意:Unicode是一个字符集,UTF-16LE是设置为字节的编码。由于历史事故,Microsoft称UTF-16LE编码为“Unicode”,但这会产生误导。)
答案 1 :(得分: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。
答案 2 :(得分:0)
这绝对不是一个有效的字符串。这看起来像是受损的UTF-16。
确实@Bobince是对的,这是一个PDF文件(最有可能是UTF-8 /或纯ASCII)显示在UTF-16中。当以UTF-8显示时,此字符串确实显示PDF源代码。好抓。