【问题标题】:How to convert String into Byte and Back如何将字符串转换为字节并返回
【发布时间】:2011-09-13 20:39:52
【问题描述】:

为了转换一个字符串,我将它转换为一个字节,如下所示: byte[] nameByteArray = cityName.getBytes();

要转换回来,我做了:String retrievedString = new String(nameByteArray);,这显然不起作用。我将如何将其转换回来?

【问题讨论】:

标签: java string byte


【解决方案1】:

您原来的城市名称中有哪些字符?试试这样的 UTF-8 版本:

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

【讨论】:

  • 这应该不是问题,因为 getBytes() 和 String(byte[] byteArray) 都使用默认字符集,这在两种情况下显然是相同的 - 假设他在单台机器上执行此操作.
  • +1,说明一切。 "什么字符" = "实际的字符编码是什么"。
  • @Jan:只有在默认字符编码能够对现有文本中的所有字符进行编码时才会起作用。
  • 似乎可行,但是当我执行以下操作时:System.out.print("PTRSP - "); System.out.println(retrievedString);,总是打印出的第一个字符是 6。所以上面的代码打印为:6TRSP - ??Albuquerque。还有为什么我一开始会得到??
  • 这意味着你的 cityName 包含一些不可打印的字符?你能告诉我原始字符串变量cityName的字符编码是什么吗?同时转储原始字符串变量 cityName 的 char 数组并将其字符代码粘贴到此处。
【解决方案2】:

这显然行不通。

其实你就是这样做的。唯一可能出错的是您隐式使用了平台默认编码,这可能因系统而异,并且可能无法表示字符串中的所有字符。

解决办法是显式使用可以表示所有字符的编码,比如UTF-8:

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

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

【讨论】:

    猜你喜欢
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多