「java自带编码」java默认使用什么编码

博主:adminadmin 2022-11-27 08:35:08 59

本篇文章给大家谈谈java自带编码,以及java默认使用什么编码对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java使用unicode为默认编码是什么意思

java初学者都会接触到一个概念,既java的默认编码是uincode,但书上也就出现这句话而已,究竟是什么意思就没再说。其实对于一个程序员来说,一个平台的编码方式是不用了解的,因为这是他内部处理字符的方式,和我们顶层设计程序是没有多大关系(如果真要说有关系的话,一个就是你对这个平台的熟悉程度,另一个就只能是你要处理的字符奇葩到要考虑编译器有没有包括这个字符)。但这并不是指我们在编程的时候完全不用考虑编码问题,恰恰相反,编码问题是跨系统交流的基本。

那java哪里会用到编码问题呢?最常见的是流,下面有两个例子。1.在linux下用java创建了一个文件(这里默认代码里没有指定编码),里面包括英文和中文,然后在windows下同样用java读取这个文件,并输出,结果中文出现了乱码;2.android手机和电脑的两个java程序进行类似qq的信息交流,中文都是乱码。疑惑来了,java不是跨平台吗,而且默认编码就是unicode,为什么会有编码? 正如上面所说,java的系统编码是管理内部变量等信息的,是统一不能变的,但上面两个例子出现乱码的原因在于这些字符信息是从外界读取的,编码方式直接影响到字符的显示,比如gbk一个字符是1或2个字节,中文是2个,而utf8是1到4个字节不定,中文是3个,utf16是2个字节固定不变,所以很明显了,同样字节数的源信息可以每2个或者每3个字节表达一个中文,不同编码当然不同了,而且即使gbk和utf16都是两个字节表示一个中文,同样的二进制也对应不同的字符。所以从外部读取到这些byte信息后,就要指定编码,比如new

String(byte[],charset),当然,也可以在构建流的时候就指定,像new

InputStreamReader(InputStream,charset)等,但像BufferedReader等没有相应的构造函数,就只能把上面的InputStreamReader作为参数了。

总结:

1.String和流(包括控制台的输出输入)的默认编码是根据系统而定,即jvm假设这些信息是当前系统创建的,windows默认中文是gbk,linux和mac是utf8(这里又来了,utf8和unicode是什么意思,简单地说,unicode是把每个字符和一个唯一的二进制码对应的标准,而utf是unicode

transformation

format,即如何表示每个唯一的二进制码,utf8,utf16和utf32是不同的编码方式);

2.IDE设置的编码方式用于存取java源文件,对于在不同系统平台上共享代码很重要;

3.java编译器采用utf8,即class文件的存储是用utf8,因为相对于utf16,utf8在处理英文占用内存小,而程序大部分都是英文;

4.jvm运行时的编码方式是utf16,即jvm用utf8从class文件读取程序后再转化为utf16编码的字符串,因为utf16是2个字节,统一的长度更方便jvm申请数组等操作;

5.网页大部分是用utf8编码的,在html头几行有charset的信息,在对下载下来的网页进行解析时,要注意编码,谷歌百度在对搜索结果的解析时也是用utf8的,所以在涉及到网络时编码问题非常重要,本人曾经栽得很惨,当然了,谁叫windows的编码不是utf8;

6.不知大家有没有经历过,如果编码弄错了,一般只有中文会出现乱码,而中文后面的英文是正确的,不合理啊,这不是类似多骨诺米牌吗,一个错了,后面不是全倒吗。所以别小看那些制定编码的专家,像utf8每个字节的前几位都用来表示一些信息,不同字节还不一样,而utf16也有,所以弄出了utf16le和utf16be

java中编码与解码分别指什么?

java中编码:URLEncoder.encode(strUri,"utf-8");

java中解码码:URLDecoder.decode(strUri,"utf-8");

java编码和解码        

流读取文件,具有转换编码功能的有:OutputStreamWriter和InputStreamReader,

构造器有如:

InputStreamReader(InputStream in, String charsetName)

创建使用指定字符集的 InputStreamReader。

OutputStreamWriter(OutputStream out, String charsetName)

创建使用指定字符集的 OutputStreamWriter。

处理字符串编码问题:

重新对获取的字符串进行编码:Byte[] bytes = str.getBytes(String encodeCharsetNam);

重新对bytes进行解码,创建新的字符串对象:str = new String(Byte[] bytes,String decodeCharsetName);

一般结合使用:str = new String(str.getBytes(String encodeCharsetName),String decodeCharsetName);

例如:resultName=new String(username.getBytes("ISO-8859-1"),"UTF-8");

还可以加入判断:

if(!Charset.forName("gbk").newEncoder().canEncode(str)){str = new Strin(str.getBytes("ISO-8859-1"),"UTF-8");}else{str = new String(str.getBytes("ISO-8859-1"),"gbk");}

处理请求参数传递编码问题:

java中编码:URLEncoder.encode(strUri,"utf-8");

java中解码码:URLDecoder.decode(strUri,"utf-8");

js中编码:encodeURIComponent(strUri);encodeURI(strUri);escape(str);

js中解码:decodeURIComponent(strUri);decodeURI(strUri);unescape(str);

补充概念:

URI组件:主机、端口、路径、查询参数、片段等。

URI组件分隔符::/?#[]@,冒号用于分隔协议和主机,/用于分隔主机和 路径,?用于分隔路径和查询参数,用于分隔多个查询参数等。

URI中的不安全字符或保留字符: ! * ‘ ( ) ; : @ = + $ , / ? # [ ] 他们具有特殊作用,例如上面的分隔作用。

URI允许出现的字符:只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符,其他字符均需要经过编码之后才能出现在Url中,比如使用保留字符的原意,而不是特殊作用。

js向java/jsp的编码与解码:

js中编码:encodeURI(encodeURI(strUri));decodeURIComponent(decodeURIComponent(strUri));

java/jsp中解码: java.net.URLDecoder.decode(strUri,"UTF-8");

js中编码两次的问题:如果使用一次编码,在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码值,两位两位取出后进行解码。

然后再传递给处理页面,然后由处理页面进行再次解码,这样前面就缺少了一次编码过程,所以前面需要连续两次编码。

为什么java的默认编码不是utf

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

工具:

win7

jdk

方法:

在计算机上右键选择属性

点击高级系统设置

点击环境变量

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

Java语言所使用的字符集是什么?

Java语言所使用的字符集是16位Unicode编码。另外再介绍一些常见的字符集:\x0d\x0a\x0d\x0a1、最早在dos下写pascal的时候,就遇到ASCII字符集,后来还是dos下写c,也是ascii字符集\x0d\x0a特点:目前最通用的单字节编码字符集\x0d\x0a表示:单字节\x0d\x0a最早ascii用7bit表示,总共能表示2^7=128个字符,后来扩展到8bit,就表示2^8=256个字符\x0d\x0a2、GB2312又称为GB2312-80字符集,全称为《信息交换用汉字编码字符集·基本集》,由原中国国家标准总局发布,1981年5月1日实施。\x0d\x0a特点:当然是能表示99%的中国汉字,还包括拉丁字母、日文假名、希腊字母、俄文字母、汉语拼音符号、汉语注音字母等\x0d\x0a表示:双字节\x0d\x0a3、GBK是汉字编码标准之一,全称《汉字内码扩展规范》,GBK 向下与GB2312编码兼容,向上支持ISO10646.1国际标准。可以认为GBK是在GB2313基础上通过内码扩展出来的一个标准。\x0d\x0a特点:完全兼容GB2312标准,支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字\x0d\x0a表示:双字节\x0d\x0a4、Big5,台湾那边使用比较多。\x0d\x0a5、GB 18030,全称是GB18030-2000《信息交换用汉字编码字符集基本集的扩充》,是我国政府于2000年3月17日发布的新的汉字编码国家标准,2001年8月31日后在中国市场上发布的软件必须符合本标准。\x0d\x0a特点:就是强大。覆盖中文、日文、朝鲜语和中国少数民族文字。满足中国大陆、香港、台湾、日本和韩国等东亚地区信息交换多文种、大字量、多用途、统一编码格式的要求。并且与Unicode 3.0版本兼容,填补Unicode扩展字符字汇“统一汉字扩展A”的内容。并且与以前的国家字符编码标准(GB2312,GB13000.1)兼容。\x0d\x0a表示:单字节、双字节、四字节三种方式\x0d\x0a6、Unicode野心更大(当然有一个国际统一标准当然是好事)\x0d\x0a特点:Unicode是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。\x0d\x0a表示:utf-8,utf-16,utf-32\x0d\x0a这里可能有点不好理解,举个例子\x0d\x0a首先,把unicode理解成对所有字符做了一个统一的编号,比如:“字”这个字符,编号是23383,这个是unicode定义的\x0d\x0a但是,在计算机中,如何存储这个编号呢?方式就有很多,存储unicode的方式,就是utf-8,utf-16,utf-32\x0d\x0a23383数值的16进制表示:0x5b57\x0d\x0autf-8用3个字节来表示汉字,所以utf-8的表示为:0xE5AD97\x0d\x0autf-16用2个字节来表示汉字,所以utf-16的表示为:0x5b57 刚好和数值是一样的\x0d\x0autf-32用4个字节来表示汉字,所以utf-32的表示为:0x00005b57 和数值是一样的,不过浪费空间\x0d\x0a7、再来讲讲utf-8,它是一种变长的字符集\x0d\x0a表示:单字节来表示字母,双字节来表示一些希腊字母,三字节来表示汉字,当然也有四字节的\x0d\x0a这么做当然会增加表示和识别的难度,不过,可以节省空间。这也是为什么utf-8在网络编码中流行的原因。\x0d\x0a

java中的编码(好困惑) 请教高手!

我看你还是不太明白一个问题

什么是pageEncoding? ------指页面编码,当前整个也面的编码方式。

request.getParameter() 是什么 ,他指 传递参数的编码,它和页面编码没关系 ,

request.setCharacterEncoding(),response.setCharacterEncoding(),才是对传递参数设置的编码。

String studentName=new String(request.getParameter("studentName").getBytes("ISO-8859-1"),"gb2312");

这是获得 ISO-8859-1的字节数组 通过gb2312解码 ,这样正常了

说明原先参数的编码 是 ISO-8859-1 。

希望对你有所帮助 。

总结了下:3种最可能 产生乱吗

java中,内部使用的是Unicode编码

一 表单提交乱码 :

1,get乱码:

地址栏中传中文乱码的问题:需要设置tomcat , URIEncoding="utf-8"

或者

%=new String(request.getParameter("name").getBytes("iso-8859-1"), "自己定")%自己定要支持中文

2,post乱码:

request.setCharacerEncoding("自己定")

或者

%@page contentType="text/html;charset=utf-8"%中的 charset=utf-8 是设置http的响应(response)中的编码信息

二 页面输出中文时出现乱码:response.setCharacterEncoding("utf-8”)

三 往数据库写入时出现乱码 连接数据库url上添加:useUnicode=truecharacterEncoding=utf-8

另外不同的tomcat版本也许默认编码不一样 要做相应调整 。

最好的一个办法就是 每个页面都经过一个编码过滤器filter .

pageEncoding我自己试了下,是也影响参数问题

等我找找他到底做什么在给解释,不大长用这个

主要还是自己学的不好。

关于java自带编码和java默认使用什么编码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-27,除非注明,否则均为首码项目网原创文章,转载请注明出处。