java中的getBytes()问题

我们知道java中的char编码方式为unicode,来看看下面的代码

public class Try {
    public static void main(String[] args) {
        // TODO code application logic here
       String x="我";
       byte[] a=x.getBytes();
       System.out.println(a.length);
    } 
}
输出结果非常神奇,是3,我们知道String是final修饰的char数组,char的编码不是unicode吗?为什么变成3个字节了?

在我们的编译平台上,我发现该文件的编码方式是UTF-8,这就说通了,getBytes()用的是文件的编码方式。

java文件运行的过程为:

1、根据文件的编码方式,将该文件转换为以UTF-8编码的.java文件。

2、将.java文件转换成二进制文件.class文件。

3、JVM装载类后运行。

4、运行时若要输出字符,则将该字符由unicode编码转换成平台的编码。

所以,平常所说的char是unicode编码,其实是说char在JVM中是unicode编码的。

Java中,字符串是使用Unicode字符集编码的。如果将Unicode编码的字符串转换为字节数组时,需要指定字符集。如果没有指定字符集,则会使用默认字符集,而默认字符集可能不支持某些字符,导致乱码问题。 为了解决乱码问题,可以使用以下方法: 1. 显式指定字符集:在调用`getBytes()`方法时,传递字符集参数,例如`str.getBytes("UTF-8")`,其中UTF-8是一种支持中文的字符集。 2. 使用`InputStreamReader`和`OutputStreamWriter`:在读写文件或网络数据流时,可以使用`InputStreamReader`和`OutputStreamWriter`来进行字符集转换,例如: ```java FileInputStream fis = new FileInputStream("file.txt"); InputStreamReader isr = new InputStreamReader(fis, "UTF-8"); BufferedReader br = new BufferedReader(isr); ``` ```java FileOutputStream fos = new FileOutputStream("file.txt"); OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8"); BufferedWriter bw = new BufferedWriter(osw); ``` 在上述代码中,`InputStreamReader`和`OutputStreamWriter`都接受一个字符集参数,并将输入流或输出流转换为指定字符集的字符流,从而避免了乱码问题。 3. 使用`StringBuffer`或`StringBuilder`:如果需要将多个字符串拼接成一个字符串时,不要使用`+`符号,而是使用`StringBuffer`或`StringBuilder`,例如: ```java StringBuffer sb = new StringBuffer(); sb.append("中文"); sb.append("English"); String str = sb.toString(); ``` 在上述代码中,`StringBuffer`会在内部维护一个字符数组,用于存储字符串,从而避免了字符集转换带来的乱码问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值