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

2025-03-24 05:31:30
推荐回答(2个)
回答1:

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

工具:

win7

jdk

方法:

  1. 在计算机上右键选择属性

  2. 点击高级系统设置

  3. 点击环境变量

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

回答2:

首先理解java的字符概念
java中字符串是字符的序列,虚拟机内部的字符都是16位的unicode字符,等价于C++中的WCHAR,也是为了实现虚拟机方便

WCHAR叫做宽字符,对应的MuitiChar叫做多字符,这种多字符中字符的位数不唯一

GBK 和 UTF8 是多字符的不同编码形式

s=new String(s.getBytes("gbk"),"utf-8");
的意思是:
byte[] bytes=s.getBytes("gbk");
s=new String(bytes,"utf-8");

第一句是将s对应的gbk编码转出来,形成一个字节流
第二句是将这个字节流按照utf-8编码转为java字符串,因此相当于将gbk编码的字节流当做utf-8来使用,这样在中文中会出现乱码

你的问题是,接口返回的已经是utf-8 所以它必须是byte[] 流,如果是字符串的话就不好办了