Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Unicode到可读文本转换解码_Java_Unicode_Encoding_Ascii - Fatal编程技术网

Java Unicode到可读文本转换解码

Java Unicode到可读文本转换解码,java,unicode,encoding,ascii,Java,Unicode,Encoding,Ascii,我正在开发一个Java应用程序,其中我正在使用一个web服务。web服务是使用SAP服务器创建的,该服务器自动以Unicode编码数据。我从web服务获得一个Unicode字符串 " 倥䙄ㄭ㌮਍쿣ී㈊〠漠橢਍圯湩湁楳湅潣楤杮਍湥潤橢਍″‰扯൪㰊഼┊敄瑶灹⁥佐呓′†䘠湯⁴佃剕䕉⁒渠牯慭慌杮䔠ൎ⼊祔数⼠潆瑮਍匯扵祴数⼠祔数റ⼊慂敳潆瑮⼠潃牵敩൲⼊慎敭⼠う㄰਍䔯据摯湩⁧′‰൒㸊ാ攊摮扯൪㐊〠漠橢਍㰼਍䰯湥瑧⁨‵‰൒㸊ാ猊牴慥൭ 䘯〰‱⸱2. " 以上是回应 我想把它转换成可读的文本格式,比如字符串

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

" 倥䙄ㄭ㌮਍쿣ී㈊〠漠橢਍圯湩湁楳湅潣楤杮਍湥潤橢਍″‰扯൪㰊഼┊敄瑶灹⁥佐呓′†䘠湯⁴佃剕䕉⁒渠牯慭慌杮䔠ൎ⼊祔数⼠潆瑮਍匯扵祴数⼠祔数റ⼊慂敳潆瑮⼠潃牵敩൲⼊慎敭⼠う㄰਍䔯据摯湩⁧′‰൒㸊ാ攊摮扯൪㐊〠漠橢਍㰼਍䰯湥瑧⁨‵‰൒㸊ാ猊牴慥൭ 䘯〰‱⸱2. "

以上是回应


我想把它转换成可读的文本格式,比如字符串。我使用的是核心Java。

如果您有
字节[]
输入流
(均为二进制数据),您可以通过以下方式获得
字符串
读卡器
(均为文本):

反向过程使用:

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

BufferedWriter writer = new BufferedWriter(new OuputStreamWriter(os, encoding));
writer.println(s);
Unicode是所有字符的编号系统。UTF变体将Unicode实现为字节


你的问题:

在正常情况下(web服务),您可能已经收到一个
字符串
。例如,您可以使用上面的Writer将该字符串写入文件。您可以自己使用完整Unicode字体进行检查,也可以将文件传递给他人进行检查

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


添加:

使用默认编码写入文件(从计算机上的操作系统)。而是使用:

new OutputStreamWriter(new FileOutputStream(new File("...")), "UTF-8")
如果它是一个二进制PDF,如@bobince所说,只需在byte[]或InputStream上使用FileOutputStream

倥䙄ㄭ㌮਍쿣ී㈊〠漠橢਍圯湩湁楳湅潣楤杮਍湥潤橢਍″‰扯൪㰊഼┊敄瑶灹⁥佐呓′†䘠湯⁴佃剕䕉⁒渠牯慭慌杮䔠ൎ⼊祔数⼠潆瑮਍匯扵祴数⼠祔数റ⼊慂敳潆瑮⼠潃牵敩൲⼊慎敭⼠う㄰਍䔯据摯湩⁧′‰൒㸊ാ攊摮扯൪㐊〠漠橢਍㰼਍䰯湥瑧⁨‵‰൒㸊ാ猊牴慥൭ 䘯〰‱⸱二,

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

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


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

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

更新
事实上@Bobince是对的,这是一个PDF文件(很可能是UTF-8/或普通ASCII)以UTF-16显示。在UTF-8中显示时,此字符串确实显示PDF源代码。很好的理解。

你说的“可读文本格式”是什么意思?Unicode已经可读。您可能使用错误的Unicode格式对其进行解码。试试UTF8或UITF16。@casablanca:可读的英文格式@dda:我无意冒犯……这个网站的运作方式是,当你问问题时,你被期望通过投票来“奖励”回答你的人,并帮助你,并选择最好的一个。嗨,Joop..谢谢你回答我的问题…但是当我使用fileWriter将从web服务接收到的字符串内容写入文件时…它仍然会给我带有中文字符的unicode字符…你能否对此给出进一步的看法..任何解决方法..没问题,请参阅我答案中的“添加”。我自己很少使用FileWriter,因为应用程序可能会在不同的计算机上使用不同的编码,谢谢你的回复。但我已经尝试过使用FileWriter和FileInputStream写入文件。它没有给我正确的结果。而且UTF-8编码也不起作用。我将使用UTF-16EL编码,如果我成功的话会告诉你。谢谢你的回答。实际上我正在看服务器端使用了什么编码技术。是的,它的PDF文档以电子邮件的形式发送通过SOAP Web服务附加。但我仍然尝试使用Java iText库生成PDF文档,上面的响应写入文件..但这也不起作用。如果您仍然有任何想法,请分享。谢谢,再次感谢。是的,可能是它的UTF-16字符串被弄坏了…我与处理Web服务的人联系在一起..但由于他们是sap人员,他们我对decdo格式不太了解…还是感谢你的努力..我把这个字符串放在一个文本编辑器中,告诉它是UTF-16,并要求编辑器以UTF-8的形式重新打开该文件,然后“哇哇”地一声,PDF内容出现了。所以肯定是UTF-16。@dda当你说PDF内容以UTF-8的形式出现在打开文件时,它是正常的英文文本吗?你能告诉我你在这里用的编辑器是什么吗?
new OutputStreamWriter(new FileOutputStream(new File("...")), "UTF-8")