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