Java String.getBytes()详解

基础概念

  • Jvm 内存中 String 的表示是采用 unicode 编码
  • UTF-8 是 Unicode 的实现方式之一

JDK

    /**
     * Encodes this {@code String} into a sequence of bytes using the named
     * charset, storing the result into a new byte array.
     */
    public byte[] getBytes(String charsetName) throws UnsupportedEncodingException {
    }

    /**
     * Constructs a new {@code String} by decoding the specified array of
     * bytes using the specified {@linkplain java.nio.charset.Charset charset}.
     * The length of the new {@code String} is a function of the charset, and
     * hence may not be equal to the length of the byte array.
     */
    public String(byte bytes[], Charset charset) {
    }

getBytes(String charsetName)

对字符串按照 charsetName 进行编码(unicode→charsetName),返回编码后的字节。
getBytes() 表示按照系统默认编码方式进行。

String(byte bytes[], Charset charset)

对字节按照 charset 进行解码(charset→unicode),返回解码后的字符串。
String(byte bytes[]) 表示按照系统默认编码方式进行

示例

正确用法

String s = "浣犲ソ"; //这是"你好"的gbk编码的字符串
String ss = new String(s.getBytes("GBK"), "UTF-8");
System.out.println(ss);
System.out.println( new String(str.getBytes("UTF-8"),"UTF-8"));

错误用法

System.out.println( new String(str.getBytes("UTF-8"),"GBK"));

参考文档

  • 字符编码笔记:ASCII,Unicode 和 UTF-8
  • java字符串的各种编码转换
  • java中GBK编码格式转成UTF8,用一段方法实现怎么做?
  • Java 正确的做字符串编码转换

你可能感兴趣的:(Java String.getBytes()详解)