杰瑞科技汇

string转byte java

在Java中,将String转换为byte[](字节数组)是一个常见操作,但需要注意字符编码(如UTF-8、GBK等)的影响,以下是几种常见的方法和示例:

string转byte java-图1
(图片来源网络,侵删)

使用 `String.getBytes()(默认编码)

String str = "Hello, 世界";
byte[] bytes = str.getBytes(); // 使用JVM默认的字符编码(可能因环境而异)

注意:如果JVM的默认编码与字符串的实际编码不一致,会导致乱码,建议显式指定编码


使用 `String.getBytes(StandardCharsets.UTF_8)(推荐)

import java.nio.charset.StandardCharsets;
String str = "Hello, 世界";
byte[] bytes = str.getBytes(StandardCharsets.UTF_8); // 显式指定UTF-8编码

优点StandardCharsets是Java 7引入的枚举类,线程安全且性能高效。


使用 `String.getBytes(String charsetName)

String str = "Hello, 世界";
try {
    byte[] bytes = str.getBytes("UTF-8"); // 指定编码名称(需处理异常)
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}

注意:需要捕获UnsupportedEncodingException异常(但UTF-8通常被支持)。


处理特定场景(如ISO-8859-1)

String str = "Hello, 世界";
byte[] bytes = str.getBytes("ISO-8859-1"); // 仅适用于ASCII字符,非ASCII字符会丢失

适用场景:某些旧系统或协议要求使用ISO-8859-1编码。

string转byte java-图2
(图片来源网络,侵删)

从字节数组恢复为String

byte[] bytes = "Hello, 世界".getBytes(StandardCharsets.UTF_8);
String str = new String(bytes, StandardCharsets.UTF_8); // 使用相同编码解码

关键点:编码和解码必须使用相同的字符集,否则会出现乱码。


常见问题

Q: 为什么会出现乱码?

A: 如果编码和解码的字符集不一致(例如编码用UTF-8,解码用GBK),会导致字节序列解析错误。

Q: 如何检查字符串的编码?

A: Java的String本身不存储编码信息,编码取决于转换时使用的字符集。

Q: 如何处理超大字符串?

A: 对于超大字符串,建议使用流式处理(如InputStreamReader)避免内存溢出。

string转byte java-图3
(图片来源网络,侵删)

完整示例

import java.nio.charset.StandardCharsets;
public class StringToByteExample {
    public static void main(String[] args) {
        String str = "Hello, 世界";
        // 方法1:推荐(UTF-8)
        byte[] utf8Bytes = str.getBytes(StandardCharsets.UTF_8);
        System.out.println("UTF-8 Bytes: " + java.util.Arrays.toString(utf8Bytes));
        // 方法2:指定编码名称
        try {
            byte[] gbkBytes = str.getBytes("GBK");
            System.out.println("GBK Bytes: " + java.util.Arrays.toString(gbkBytes));
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 解码示例
        String decodedStr = new String(utf8Bytes, StandardCharsets.UTF_8);
        System.out.println("Decoded String: " + decodedStr);
    }
}

  • 优先使用 StandardCharsets.UTF_8,避免依赖JVM默认编码。
  • 编码和解码必须使用相同的字符集
  • 避免使用未指定编码的getBytes()方法,除非你确定环境编码。
分享:
扫描分享到社交APP
上一篇
下一篇