java getbytes 长度_JAVA中的getBytes()方法

在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组。这个表示在不同情况下,返回的东西不一样!

String.getBytes(String decode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示,如:

Java代码  5656a4c3731a4f0586af8632d6dafdbf.png

byte[] b_gbk = "深".getBytes("GBK");

byte[] b_utf8 = "深".getBytes("UTF-8");

byte[] b_iso88591 = "深".getBytes("ISO8859-1");

byte[] b_unicode = "深".getBytes("unicode");

将分别返回“深”这个汉字在GBK、UTF-8、ISO8859-1和unicode编码下的byte数组表示,此时b_gbk的长度为2,b_utf8的长度为3,b_iso88591的长度为1,unicode为4。

而与getBytes相对的,可以通过new String(byte[], decode)的方式来还原这个“深”字时,这个new String(byte[], decode)实际是使用decode指定的编码来将byte[]解析成字符串。

Java代码  5656a4c3731a4f0586af8632d6dafdbf.png

String s_gbk = new String(b_gbk,"GBK");

String s_utf8 = new String(b_utf8,"UTF-8");

String s_iso88591 = new String(b_iso88591,"ISO8859-1");

String s_unicode = new String(b_unicode, "unicode");

通过打印s_gbk、s_utf8、s_iso88591和unicode,会发现,s_gbk、s_utf8和unicode都是“深”,而只有s_iso88591是一个不认识的字符,为什么使用ISO8859-1编码再组合之后,无法还原“深”字呢,其实原因很简单,因为ISO8859-1编码的编码表中,根本就没有包含汉字字符,当然也就无法通过"深".getBytes("ISO8859-1");来得到正确的“深”字在ISO8859-1中的编码值了,所以再通过new String()来还原就无从谈起了。

因此,通过String.getBytes(String decode)方法来得到byte[]时,一定要确定decode的编码表中确实存在String表示的码值,这样得到的byte[]数组才能正确被还原。

有时候,为了让中文字符适应某些特殊要求(如http header头要求其内容必须为iso8859-1编码),可能会通过将中文字符按照字节方式来编码的情况,如

String s_iso88591 = new String("深".getBytes("UTF-8"),"ISO8859-1"),

这样得到的s_iso8859-1字符串实际是三个在 ISO8859-1中的字符,在将这些字符传递到目的地后,目的地程序再通过相反的方式String s_utf8 = new String(s_iso88591.getBytes("ISO8859-1"),"UTF-8")来得到正确的中文汉字“深”。这样就既保证了遵守协议规定、也支持中文。

同样,在开发会检查字符长度,以免数据库字段的长度不够而报错,考虑到中英文的差异,肯定不能用String.length()方法判断,而需采用String.getBytes().length;而本方法将返回该操作系统默认的编码格式的字节数组。如字符串“Hello!你好!”,在一个中文WindowsXP系统下,结果为12,而在英文的UNIX环境下,结果将为9。因为该方法和平台(编码)相关的。在中文操作系统中,getBytes方法返回的是一个GBK或者GB2312的中文编码的字节数组,其中中文字符,各占两个字节,而在英文平台中,一般的默认编码是"ISO-8859-1",每个字符都只取一个字节(而不管是否非拉丁字符)。所以在这种情况下,应该给其传入字符编码字符串,即String.getBytes("GBK").length。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343503.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤教育】国家开放大学2018年春季 0273-21T中国现代文学 参考试题

试卷编号:0273 座位号 2017——2018学年度第二学期期末考试 中国现代文学 试题 2018年7月 1.在文学革命中,_________提出的“八事”和陈独秀提出的“____________”,成为文学革命的主要内容。2.1921年10月出版的小说…

【渝粤教育】国家开放大学2018年春季 0341-21T高级英语听力(2) 参考试题

试卷代码:0341 2017-2018学年度第二学期期末考试 高级英语听力(2)试题 2018年7月 注 意 事 项 一、将你的准考证号、学生证号、姓名及分校(工作站)名称填写在答题纸规定栏内。 考试结束后,把试卷和答题纸放…

按应用领域来划分,电话光端机主要分为哪几类

我们都知道,电话光端机就是把传统的电话信号转换成光信号并在光纤上进行传输的设备。但是对于电话光端机的分类这块,大家可能了解的并不是很清楚,电话光端机根据不同的分类方式,有着不同的分法,今天飞畅科技的小编主要…

java构造函数可以重写_JAVA构造器,重载与重写

1. java构造器构造器也叫构造方法(constructor), 用于对象初始化. 构造器是一个创建对象时被自动创建的特殊方法,目的是对象的初始化. 构造器 的名称与类的名称一致. JAVA通过new关键子来调用构造器,从而返回该类的实例,是一种特殊的方法.备注要点:a. 通过new关键字来调用b. 构…

JUnit 5测试中的临时目录

JUnit 4 TemporaryFolder Rule允许开发人员使用临时目录创建测试。 使用JUnit 5时,不支持Rule因此测试文件和目录需要一些额外的工作。 幸运的是,有了JUnit 5.4,有一个新的内置扩展可以处理测试中的临时目录。 而且它非常易于使用。 您还在使…

【渝粤教育】国家开放大学2018年春季 0508-21T影视特技及后期合成 参考试题

科目编号:[0508] 座位号 2017-2018学年度第二学期期末考试(开卷) 影视特技及后期合成 试题 2018年 7 月 一、填空题(本大题共7小题共10空,每空3分,共计30分) 1.非线性编辑系统由两大部分组成,即…

【渝粤教育】国家开放大学2018年春季 0579-22T电路及磁路(2)(一) 参考试题

科目编号:0579 座位号: 2018-3正考期末考试 电路及磁路(2)(一) 试 题 2018年7月 1.电流源是一种理想化电源元件,它具有两种基本性质:(1&#x…

光纤收发器长距离的传输过程出现死机的解决方案

光纤收发器是网络通信中必不可少的一种设备,但是,我们在使用过程中难免会遇到各种各样的问题,其中,光纤收发器出现死机可以说是很常见的一种故障,那么,光纤收发器经常会出现死机到底是什么原因,…

【渝粤教育】国家开放大学2018年春季 0674-21T财务管理 参考试题

科目编号:[0674] 座位号 2017-2018学年度第二学期期末考试 财务管理 试题 2018年 7 月 一、单选题(本大题共10小题,每小题3分,共计30分) (★请考生务必将答案填入到下面对应序号的答题框中★) …

java utf8转iso8859-1_在Java中将UTF-8转换为ISO-8859-1

小编典典我不确定标准库中是否有将执行此操作的规范化例程。我不认为标准的Unicode规范化程序会处理“智能”引号的转换-但不要引用我。明智的做法是转储ISO-8859-1并开始使用UTF-8。也就是说,可以将任何通常允许的Unicode代码点编码为HTML网页,编码为IS…

【渝粤教育】国家开放大学2018年春季 0699-21T阅读与写作 参考试题

试卷代码:0699 2017-2018学年第2学期期末考试 阅读与写作 (闭卷) 2018年5月 一、阅读以下文章,并回答问题。(共40分) 绿色的梦 陆文夫   ①近些年来,梦特别多。没有美梦,没有恶梦,所有的梦几…

java 正则表达式 替换括号,Java正则表达式:如何替换方括号内的所有字符?

How do I able to replace:((901)%(100-4)) ((901)%(100-4/(6-4))) - (var1%(var2%var3(var4-var5)))withXYZ((901),(100-4)) XYZ((901),100-4/(6-4)) - XYZ(var1,XYZ(var2,var3(var4-var5)))with regex?Thanks,J解决方案this doesnt really look like a very good job for …

什么是光纤收发器?光纤收发器的两种连接方案你了解吗?

在如今这个科技飞速发展的时代,网络变得越来越重要,而说到网络的发展和建设,那就离不开光纤的大量应用了,怎样才能在网络建设中更快更稳定的实现光信号与电信号的相互转换,是我们要考虑的一个重要问题。而光纤收发器正…

【渝粤教育】国家开放大学2018年春季 3780-21T燃气设备操作与维护 参考试题

科目编号:3780 座位号 2017-2018学年度第二学期期末考试 燃气设备操作与维护 试题 2018年 7月 一、判断题(本大题共10小题,每题2分,共计20分) 1.臭剂的浓度只要别太大就可以了。 ( &#xff…

maven项目 ant_将旧项目从Ant迁移到Maven的4个简单步骤

maven项目 ant一段时间以来,我们一直在考虑将构建从蚂蚁移植到Maven。 它发生在上个月,实际上比我们预期的要简单。 根据我的经验,这里简要介绍了我们遵循的步骤。 我们的应用程序是一个具有多个框架和技术的企业Web应用程序构建,…

【渝粤教育】21秋期末考试成本会计10168k2

1、为了正确、及时地计算产品成本,企业应做好各项基础工作,但不包括( )。 (2 分) A.材料物资的计量、收发、领退和盘点 B.选择适当的成本计算方法 C.定额的制定和修订 D&…

工业级千兆以太网光纤收发器产品介绍

工业级光纤收发器是一种可以延长传输距离的一种工业交换机,它具有便捷、维护简单、抗干扰性能强、性能强大、运行稳定等优点。产品设计符合以太网标准,性能稳定可靠。该设备可广泛应用于智能交通、电信、安防、金融证券、海关、海运、电力、水利及油田等…

java 秒杀多线程_秒杀多线程系列 - 随笔分类 - Joyfulmath - 博客园

随笔分类 - 秒杀多线程系列秒杀多线程系列,该系列转载至CSDN MoreWindows:http://blog.csdn.net/morewindows/article/details/7392749摘要:package com.jayfulmath.designpattern.command;import java.util.concurrent.Semaphore;/* P(S)&am…

Java 12新功能完整指南

六个月飞得如此之快,是时候再次仔细研究一下即将发布的新JDK版本。 让我们满足Java 12及其向开发人员介绍的功能。 自甲骨文推出其6个月加速发布节奏以来已经有一段时间了,要跟上每个版本及其添加到表中的功能越来越难了。 从好的方面来说,…

【渝粤教育】21秋期末考试电算化会计10169k2

单项选择题 1、在固定资产核算系统的卡片中,能够唯一确定每项资产的数据项是() (2 分) A.类别编号 B.规格型号 C.资产名称 D.资产编号 单项选择题 1、在固定资产核算系统的卡片中,能…