Java中的编码问题

在实际工作项目过程中,经常会碰到乱码的情况。本节来简单讲一下java的编码问题

如下代码

import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
public class Main {
    public static void main(String[] args) throws UnsupportedEncodingException {
        //获取文件编码格式,默认为UTF-8
        System.out.println("系统默认编码:"+System.getProperty("file.encoding"));
        //获取系统默认字符编码,默认为UTF-8
        System.out.println("系统默认字符编码:"+Charset.defaultCharset());
        //操作系统用户使用的语言
        System.out.println("系统默认语言:"+ System.getProperty("user.language"));

        String a ="中国";

        byte[] b = a.getBytes(StandardCharsets.UTF_8);     //以UTF-8的格式将字符串转为字节数组
        String c = new String(b, StandardCharsets.UTF_8);   //以UTF-8的格式将字节数组转为字符串
        System.out.println(c);

        b = a.getBytes("GBK");     //以GBK的格式将字符串转为字节数组
        c = new String(b, StandardCharsets.UTF_8);   //以UTF-8的格式将字节数组转为字符串
        System.out.println(c);

        b = a.getBytes(StandardCharsets.UTF_8);     //以UTF-8的格式将字符串转为字节数组
        c = new String(b, "GBK");   //以GBK的格式将字节数组转为字符串
        System.out.println(c);
    }
}

运行结果,可以看出,当我们将字符串转为字节数组和将字节数组转为字符串的过程中,编码必须相同。

还有我们在执行系统命令的过程中,输出是乱码的。这种情况经常发生,这主要是由于系统的编码和我们当前项目编码不一致造成的。项目编码默认为UTF-8,而我们计算机的默认编码为GBK,所以导致这种问题。

所以这种情况下解决乱码是读取的时候。设置编码为GBK。如下

package com.company;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
public class Main {
    public static void main(String[] args) throws IOException, InterruptedException {
        Process p = Runtime.getRuntime().exec("ipconfig");
        java.io.InputStream is = p.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(is, Charset.forName("GBK"))); //设置读取的时候的编码为GBK
        p.waitFor();
        if(p.exitValue()!=0){
            //说明命令执行失败
        }else{
            String s = null;
            while((s=reader.readLine())!=null){
                System.out.println(s);
            }
        }
    }
}

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付 19.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值