为什么java的默认编码不是utf-8 而是gbk

Python012

为什么java的默认编码不是utf-8 而是gbk,第1张

因为系统是中文语言的,得到的是GBK编码,所以肯定不是utf的。

工具:

win7

jdk

方法

在计算机上右键选择属性

点击高级系统设置

点击环境变量

在系统变量中点新建,输入变量名为: JAVA_TOOL_OPTIONS, 变量值为:-Dfile.encoding=UTF-8,确定就可以了。

/*

 * To change this license header, choose License Headers in Project Properties.

 * To change this template file, choose Tools | Templates

 * and open the template in the editor.

 */

package cn.timecd.gyhhy.mscup

import java.io.UnsupportedEncodingException

import java.nio.charset.Charset

import java.util.Arrays

import java.util.logging.Level

import java.util.logging.Logger

/**

 * 主要涉及到 String 类的 getBytes 方法

 * @author 32798

 */

public class Test {

    public static void main(String[] args){

        // 预定义常量

        String charset = "gbk"// 编码

        

        // 请注意,找不到编码集的时候,下面这句代码 会抛出

        // java.nio.charset.UnsupportedCharsetException

        Charset charset$ = Charset.forName(charset) // 获取编码集

        // 只是阅读: 两个 变量名字 比较, 请注意区分

        // charset

        // charset$

        

        // 从 string 转 bytes

        String str = "这是一个测试文本"

        try {

            // 方法一: 直接通过 编码集的名字 转码

            // 需要 try-catch

            // 当字符集找不到时会抛出 java.io.UnsupportedEncodingException

            System.out.println(Arrays.toString(str.getBytes(charset)))

        } catch (UnsupportedEncodingException ex) {

            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex)

        }

        // 方法二: 通过 编码集(java.nio.charset.Charset) 转码

        // 不需要 try-catch

        System.err.println(Arrays.toString(str.getBytes(charset$)))

        try {

            Thread.sleep(200) // 只是为了让 ide 能按顺序输出

        } catch (InterruptedException ex) {}

        

        // 从bytes 转 string

        //byte[] bytes = {-78, -35, -60, -32, -62, -19}

        byte[] bytes = str.getBytes(charset$)// 只是为了获取测试文本的 gbk 码

        System.out.print("\n\n\n") // 隔出3行, 免得跟之前的输出混淆

        try {

            // 方法一: 通过 编码集名字 新建一个 string

            // 需要 try-catch

            // 当字符集找不到时会抛出 java.io.UnsupportedEncodingException

            System.out.println(new String(bytes, charset))

        } catch (UnsupportedEncodingException ex) {

            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex)

        }

        // 方法二: 直接通过 字符集 新建一个 string

        System.err.println(new String(bytes, charset$))

    }

}

我先解释一下我对你的问题的理解

你的问题有点笼统

可以这么理解两个意思

,你是想吧一个gbk编码的字符串用utf-8格式来编码

String

s

=

new

String

("全国".getBytes("GBK"),"GBK")

虽然这个时候的s是GBK编码的

但是s还是中文字符的

所以

上面这位同胞用

new(s.getBytes("GBK"),"UTF-8")的方式肯定是错的

应该用

String

s1

=

new

String

(s.getBytes("UTF-8"),"UTF-8")

这样s1就是UTF-8编码的字符串了

二,如果是遇见乱码问题

比如

String

s

=

new

String

("全国".getBytes("GBK"),"GBK")

这样的s就是gbk编码的

现在你要把GBK格式的编码用UTF-8去编码

肯定就会出现乱码

String

s2

=

new

String(s.getBytes("GBK"),"UTF-8")

这个s2肯定是乱码的

而且这样就根本解不出来了

系统出现的乱码显示的时候才会出现编码错误

所以

一般出现乱码

只要把输入流换个编码解析一下就ok了

还有什么不明白

可以问我