getByte()用法小结

2023-05-16

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

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

Java代码   收藏代码
  1. byte[] b_gbk = "深".getBytes("GBK");   
  2. byte[] b_utf8 = "深".getBytes("UTF-8");   
  3. byte[] b_iso88591 = "深".getBytes("ISO8859-1");   
  4. 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代码   收藏代码
  1. String s_gbk = new String(b_gbk,"GBK");   
  2. String s_utf8 = new String(b_utf8,"UTF-8");   
  3. String s_iso88591 = new String(b_iso88591,"ISO8859-1");   
  4. 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。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

getByte()用法小结 的相关文章

  • ROS | 服务通信的编程实现

    ROS 服务通信的编程实现 1 创建功能包2 节点编程与服务数据定义2 1 案例说明2 2 服务数据的定义2 3 创建 cpp文件2 4 客户端编程2 5 服务器编程 3 配置与编译3 1 在CMaKeLists txt中添加编译选项3 2
  • HTTP基础验证

    HTTP 内置基础验证 浏览器收到401状态码响应后 xff0c 弹出要求输入信息的对话框 通过验证则显示内容 xff0c 不通过不显示需要验证身份的内容 1 xff1b 手动HTTP基础验证 xff1a header 39 http 1
  • 位域,段域,联合体,结构体操作寄存器

    include lt stdio h gt typedef int Uint16 struct SCICCR BITS bit description Uint16 SCICHAR 3 2 0 Character length contro
  • C++ 网络编程之使用socket + epoll 模拟http 的请求与响应

    为了更好的理解http协议 xff0c 笔者使用了C 43 43 socket模拟了一个http服务器 xff0c 其中的服务器使用了epoll的方式 xff0c 并针对每一个新的连接开启新线程处理 大致分为三个部分 xff0c 具体代码可
  • 【Nova】nova-scheduler过滤称重

    在上一篇 nova scheduler调度过程分析 中 xff0c 对过滤称重的过程一笔带过了 xff0c 这篇着重介绍一下 首先 xff0c 我们声明一下host为主机 xff0c node为节点 xff0c 在OpenStack中一个h
  • 1.通过tcp从daytime服务器获取时间

    最近愈发觉得在学习源代码或者看书的时候 xff0c 做下读书笔记 xff0c 不仅能加深印象和理解 xff0c 同时也方便日后进行回顾 xff0c 所以就写下UNP UNIX网络编程 卷1的读书笔记 xff0c 涉及到的代码基本都是原作者提
  • 4.IPv4和IPv6地址长度

    IPv4地址的二进制形式长度为32 xff0c 使用我们常用的点分十进制形式进行表示那么最长长度为15 xff0c 例如 255 255 255 255 所以在posix的 lt netinet in h gt 中定义的IPv4地址字符串形
  • 29.Nginx HTTP之请求行解析函数ngx_http_parse_request_line

    Nginx的HTTP模块中使用ngx http parse request line函数来对读取的请求行进行解析 xff0c HTTP请求行的格式不是很复杂 xff0c 但是要注意HTTP 0 9与1 0 1 1之间的区别 xff1b 另外
  • 4. 事务隔离级别之Read Uncommitted

    前面我们说过 xff0c 要获得最高的事务隔离性 xff0c 可以采取序列化 串行的方式 xff0c 代价是严重影响系统处理事务的吞吐量 就好像数据库是个多核CPU xff0c 事务串行后 xff0c 那么意味着我们总是在使用单核 xff0
  • Vision Transformer学习笔记

    Vison Transformer学习笔记 1 前言2 网络结构 amp 设计原理2 1 Linear Projection of Flattened Patches2 2 Transformer Encoder2 2 1 Layer No
  • 5. 事务隔离级别之Read Committed

    这篇我们学习事务隔离级别Read Committed xff0c 顾名思义 xff0c 就是读已提交 xff0c 一个事务只能看到其他并发的已提交事务所作的修改 很显然 xff0c 该级别可以解决Read Uncommitted中出现的 脏
  • 6. 事务隔离级别之Repeatable Read

    接下来我们学习Mysql默认的事务隔离级别Repeatable Read xff0c 顾名思义 xff0c 可重复读 xff0c 也即在一个事务范围内相同的查询会返回相同的数据 延续上面的栗子 xff1a 1 小明很开心自己考了69分 xf
  • 7.事务隔离级别之Serializable

    最后我们学习一下最高的事务隔离级别Serializable xff0c 顾名思义 xff0c 可串行化的 xff0c 也即并发事务串行执行 很显然 xff0c 该级别可以避免前面讲到的所有问题 xff1a 脏读 不可重复读 和 幻读 代价是
  • 6. 消息发送重试

    当连接失败 xff0c Celery会自动重试发送消息 xff0c 我们可以对重试行为进行设置 xff0c 譬如说多久重试一次 最大重试次数或者干脆不重试 xff01 当然这只是官方文档说的 xff0c 我在Windows上进行测试 xff
  • 1. RabbitMQ安装

    RabbitMQ作为消息队列 xff0c 在分布式系统中具有举足轻重的作用 xff0c 能够方便地解耦各个组件 xff1b OpenStack之所以具有高扩展性 xff0c RabbitMQ功不可没 虽然一直都在用 xff0c 但没有进行过
  • 1. Tornado实现聊天室

    Tornado的异步I O机制使其很适合处理长连接的场景 xff0c 在官方提供的Demo中就有一个简单的聊天室实现 xff0c 大致做法如下 xff1a 1 提供一个全局的消息缓存 2 每次获取新消息时 xff0c 如果缓存中没有新消息出
  • D435i运行VINS-mono以及Kalib标定

    D435i运行VINS mono以及Kalib标定 系统说明 xff1a Ubuntu 18 04 内核版本 xff1a 5 4 0 1 运行VINS mono 参考博客VINS xff08 D435i xff09 测试 问题 xff1a
  • ESP8266/ESP01 Server模式中TCP Client无法接收到数据

    硬件环境 xff1a ESP01 ESP8266 Windows7 xff0c 网络调试助手 xff0c 串口调试助手 先设置ESP8266的服务器模式 AT 43 CIPMUX 61 1 AT 43 CIPSERVER 61 1 8080
  • ROS报错:TF_OLD_DATA ignoring data from the past for frame leftwheel_link

    现象 xff1a rviz 中提示no transform from XX to odom 原因 xff1a lt param name 61 34 use sim time 34 value 61 34 true 34 gt 中use s
  • STM32-寄存器编程-使用寄存器点亮LED

    一 工程文件的建立 1 我们建立一个 工程模板 文件夹 xff0c 在它下面在新建4个文件夹 Listing存放编译器编译适合产生的C 汇编 链接的列表信息Project存放工程Output存放编译产生的调用信息 hex文件 预览信息 封装

随机推荐

  • VC 与VS的区别以及各个版本之间的对应关系

    各个版本之间的对应关系 使用windows平台搞开发时 xff0c 下载第三方库时经常会遇到文件名以VCxx版本号命令 xff0c VC版本如何转换成对应的VS的版本呢 xff0c 这里总结一下vc和vs的关系 Microsoft Visu
  • C/C++永不过时,不服来辩!

    序言 当你需要为你的项目放弃不同部分的时候 xff0c C 43 43 能帮你做到 当你需要不同抽象层次不同的性能要求时 xff0c C 43 43 能帮你做到 如果用别的语言 xff0c 你会发现那个语言只能做某几类的 而C 43 43
  • 标准c++库和stl库,boost库,qt库的总结(一)

    用了很长时间是stdio iostream 等头文件 xff0c 一直有个疑惑 xff0c 也用了很长一段是键的stl标准库中个别的类 xff0c 间接性的知道了boost库 xff0c qt库等一系列的库 昨天在有用到 include l
  • 激光雷达的结构和分类

    在蔚来ET7的发布会上 xff0c 李斌特别指出 xff0c ET7搭载了1550nm的激光雷达 小鹏P5搭载的两颗大疆览沃车规级激光雷达在ROI区域积分时间0 1秒下 xff0c 能等效144线 极狐阿尔法S HI版搭载的华为的车规版激光
  • STM32之串口通信之printf重定向

    当我们在学习一款CPU时 xff0c 最经典的实验莫过于流水灯了 xff0c 掌握流水灯的话就基本等于学会操作I O口了 xff0c 那么在学会I O之后 xff0c 相对于我们来说会把学习串口的操作放在第二位 在程序运行的时候我们可以点亮
  • 网络RTK——主辅站误差改正法(MAC)

    主辅站误差改正法的基本思想是 xff0c 首先 xff0c 将基准网内所有基准站的相位距离转换到公共整周未知数水平 xff0c 即整周模糊度被消除 其次 xff0c 计算各个误差改正项 xff0c 充分考虑误差的色散和非色散特性 xff0c
  • Centos7 thinkphp6 安装 swoole 小皮面板环境

    环境准备 xff1a centos 7 thinkphp6 nginx 小皮面板 本想着根据官方指引https www kancloud cn manual thinkphp6 0 1359700 完成安装 xff0c 结果中间波折挺多 x
  • 关于qt中加载gif图片,cpu占用过高的解决发办法

    1 将gif图拆分成若干张静态png图 xff1b 2 程序启动 xff0c QImage对象list中 xff1b 3 使用定时器或者多线程来控制label setPixmap加载的QImage对象 xff1b 关于gif显示快慢的问题
  • linux下命令行方式的音量控制

    输入命令 xff1a alsamixer xff1b 设置系统音量 xff0c 这个百分比会有一定的误差存在 amixer set Speaker 100 设置系统麦克风 amixer set Mic 100 c 43 43 代码可以执行运
  • Ubuntu检测ip有效性 且 修改系统ip

    正则表达式实现检测IP地址是否有效 bool UntilTool CheckIPAddrIsVaild string str regex check ip 34 25 0 5 2 0 4 0 9 1 0 9 0 9 1 9 0 9 1 9
  • clion同一个项目创建多个可执行文件

    简述需求 xff1a 需要写多个可执行文件 xff0c 但是文件一些工具类等都是通用的 xff0c 比较麻烦的就是创建多个项目 xff0c 下来让你一个项目中生成多个可执行文件 xff0c 用到那个编译那个就可以了 默认创建好项目后 xff
  • Visual Studio Code (vscode) 配置C、C++环境/编写运行C、C++(Windows)【真正的小白版】

    写在前面的前面 xff1a 这篇文章vscode和cpp插件版本有点老了 xff0c 仅供大家参考 xff0c 最新的和最详细的更新见我的另一篇文章 xff1a https blog csdn net bat67 article detai
  • linux服务端下的c++ udp socket demo

    linux服务端 udp socket demo 如下 xff1a 创建接受数据的socket int iSock 61 socket PF INET SOCK DGRAM 0 printf 34 socket ss d n 34 iSoc
  • ROS个别命令的使用 ros ros2

    ros1 录包 rosbag record a O filename bag 解释 xff1a a是把所有的包都进行录制 xff0c O表示后面需要跟输出的文件名字 xff0c o的话系统会自己添加录制日期为文件名上 xff1b rosba
  • 浅析 自动驾驶、遥控驾驶、平行驾驶区别

    以下内容仅为个人粗浅理解 xff0c 欢迎大家留言指正 图片内容来源于互联网 xff0c 图片权利归图片作者所有 xff0c 本文仅引用 自动驾驶 xff1a 重点在车端 xff0c 自动驾驶相关资源部署在车端 xff0c 或大部分算力等都
  • CNN图像分割简史:从R-CNN到Mask R-CNN(译)

    一直想总结一下CNN在图像分割中的发展脉络 xff08 主要是R CNN及其改进方法 xff09 xff0c 看到一篇不错的英文博文 A Brief History of CNNs in Image Segmentation From R
  • c: __FILE__, __LINE__

    这是编译器内置宏 xff0c 这些宏定义不仅可以帮助我们完成跨平台的源码编写 xff0c 灵活使用也可以巧妙地帮我们输出非常有用的调试信息 注意 xff0c 是双下划线 xff0c 而不是单下划线 FILE 包含当前程序文件名的字符串 LI
  • 当数组遇到mybatis in 的时候

    我想实现 多个id 传入sql 语句 的操作 1 我试着将数组 stringUtils join 数组 34 34 数组转string 并以逗号分隔 没成功 因为传到sql 里是 123 234 435 xff0c 而我们需要的是 123
  • jeesite中的ztree应用

    话不多说 xff0c 直接开始一二三 jeesite页面上通过以自定义jstl lt sys treeselect gt 方式引入树形选择 1 lt sys treeselect id 61 34 company 34 name 61 34
  • getByte()用法小结

    在Java中 xff0c String的getBytes 方法是得到一个操作系统默认的编码格式的字节数组 这个表示在不同情况下 xff0c 返回的东西不一样 xff01 String getBytes String decode 方法会根据