本文概述
将字节数组转换为String的过程称为解码。此过程需要一个字符集。虽然, 我们应该使用字符集来解码字节数组。
有两种方法可以将字节数组转换为字符串:
- 通过使用String类构造函数
- 通过使用UTF-8编码
通过使用字符串类构造函数
将字节数组转换为String的最简单方法是, 我们可以将String类构造函数与byte []作为构造函数参数一起使用。
String str=new String(bytes);
例
下面的示例不使用任何字符编码。
public class ByteArraytoStringExample
{
public static void main(String args[])
{
try
{
byte[] bytes = "hello world".getBytes();
//creates a string from the byte array without specifying character encoding
String s = new String(bytes);
System.out.println(s);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
输出:
通过使用UTF-8编码
在将字节数组转换为String时, 请记住字符编码。由于字节是二进制数据, 而字符串是字符数据。重要的是要知道从中创建字节数组的文本的原始编码。当我们使用不同的字符编码时, 我们不会取回原始字符串。
假设我们必须从以“ ISO_8859_1”编码的文件中读取字节数组。将字节数组转换为字符串时, 我们没有任何字符编码。我们使用String类构造函数将字节数组转换为String, 但不能保证我们将获得相同的文本。这是因为String类的构造函数使用平台的默认编码。
字节保存8位, 最多可以包含256个不同的值。它适用于仅使用七个位的ASCII字符集。如果字符集具有超过256个值, 则应明确指定编码, 该编码告诉你如何将字符编码为字节序列。
Java平台支持以下字符集:
- StandardCharsets.ISO_8859_1
- 标准字符集
- 标准字符集.UTF_16
- 标准字符集.UTF_16BE
- 标准字符集.UTF_16LE
当我们不记得确切的编码时, 在这种情况下, 我们的平台将无法正确转换那些特殊字符。通过提供“ UTF-8”作为字符编码来解决此问题。 Java在String类中提供了另一个重载的构造函数, 该构造函数接受字符编码。
new String(byte[], "character encoding");
例
在下面的示例中, 我们使用StandardCharset.UTF_8指定编码。
import java.io.IOException;
import java.nio.charset.StandardCharsets;
public class ByteArraytoStringExample1
{
public static void main(String[] args)
{
try
{
byte[] b = "Morning".getBytes(StandardCharsets.UTF_8); //byte array
String string = new String(b, StandardCharsets.UTF_8); //string with "UTF-8" encoding
System.out.println(string);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
输出:
例
在下面的示例中, 我们在创建字节数组时采用了char。由于自动装箱, 它可以工作。 char’T’在字节数组中被转换为84, 依此类推。这就是两个字节数组的输出相同的原因。
public class ByteArraytoStringExample2
{
public static void main(String[] args)
{
byte[] byteArray = { 'T', 'E', 'C', 'H', 'N', 'O', 'L', 'O', 'G', 'Y'}; //byte array of characters
byte[] byteArray1 = { 84, 69, 67, 72, 78, 79, 76, 79, 71, 89}; //array of ASCII values
String s = new String(byteArray); //converts byteArray to String
String str = new String(byteArray1);
System.out.println(s);
System.out.println(str);
}
}
输出:
String类还有一个构造函数, 我们可以在其中传递字节数组和Charset作为参数。因此, 以下语句也可以用于在Java中将字节数组转换为String。
String str = new String(byteArray, StandardCharsets.UTF_8)
String类还具有一个构造函数, 可将字节数组的子集转换为String。
String(byte[] bytes, int offset, int length, String charsetName)
让我们看另一个使用不同编码的例子。
例
import java.io.UnsupportedEncodingException;
public class ByteArraytoStringExample3
{
public static void main(String args[])
{
try
{
byte[] bytes = new byte[] { 75, 69, 82, 115, 121, 90, 43, 98, -30}; //bytes in ASCII code
String utf = new String(bytes, "UTF-8"); //converts into UTF-8 encoding
String cp1252 = new String(bytes, "Cp1252"); //conversts into Cp1252 endcoding
//converts into windows-1252 encoding
String windows1252 = new String(bytes, "Windows-1252");
System.out.println("String in UTF-8 encoding : " + utf);
System.out.println("String in Cp1252 encoding : " + cp1252);
System.out.println("string Windows-1252 encoding : " + windows1252);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
输出:
评论前必须登录!
注册