如何将字符串转换为字节并再次转换回来

6

为了将字符串转换为字节,我按以下方式将其转换为字节数组:byte[] nameByteArray = cityName.getBytes();

要进行反向转换,我尝试使用以下代码:String retrievedString = new String(nameByteArray); 但这显然行不通。你应该如何进行反向转换呢?


1
new String()中,您需要指定charsetname,例如new String(byte[], "utf-8")。使用与原始字符串相同的字符集。 - Augusto
1
这就是你应该将其转换回去的方式。例如:http://ideone.com/TDb7E。你能具体解释一下什么不起作用吗? - Bala R
1
阅读经典文章,了解在将字节转换为字符串时为什么需要指定编码。 - dm3
可能是什么是字符编码,为什么我要关心它的重复问题。 - Raedwald
2个回答

10

你原本的城市名中有哪些字符?尝试使用UTF-8版本进行如下操作:

byte[] nameByteArray = cityName.getBytes("UTF-8");
String retrievedString = new String(nameByteArray, "UTF-8");

这应该不是问题,因为getBytes()和String(byte[] byteArray)都使用默认字符集,假设它在同一台机器上执行,显然两者的字符集是相同的。 - Jan Zyka
+1,解释了一切。"What characters" = "实际的字符编码是什么"。 - Andreas Dolk
2
@Jan:只有当默认字符编码能够编码现有文本中的所有字符时,它才能正常工作。 - Jon Skeet
似乎它可以工作,但是当我执行以下操作时:System.out.print("PTRSP - "); System.out.println(retrievedString);,总是打印出第一个字符为6。因此,上面的代码输出为:6TRSP - ??Albuquerque。另外,为什么我在开头得到了?? - darksky
你能在Java中转储字符串的char数组吗?你会怎么做? - darksky
显示剩余2条评论

5

这显然是行不通的。

实际上这就是做法。唯一可能出错的地方是你隐式使用了平台默认编码,这种编码在不同系统之间可能会不同,并且可能无法表示字符串中的所有字符。

解决方案是显式使用能够表示所有字符的编码,例如UTF-8:

byte[] nameByteArray = cityName.getBytes("UTF-8");

String retrievedString = new String(nameByteArray, "UTF-8");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接