你真的了解中英文字符么--str.length()与str.getBytes().length的区别

2024-02-15 22:58

本文主要是介绍你真的了解中英文字符么--str.length()与str.getBytes().length的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目中一个很小的细节让我深思,工作这么久了,渐渐的竟然又“想当然”了。

项目中与第三方回调的时候需要给第三方返回报文,而这个报文不能返回trunk模式,所以在返回报文之前要设置返回报文的长度,可是我用了str.length()去获取返回报文的长度的时候控制台打印的真实的报文确实缺少了一部分内容,这个问题开始觉得很奇怪,经过各种实验,终于知道了原因。(关于trunk模式的问题请参考博客:返回xml非chunked模式)

具体原因我就不详述了,相信读者看到下面这段代码及输出结果的时候就知道答案了,另外,对于同一段代码,我这有了两个运行的结果,如果你不知道答案,又想知道答案的话,一方面,你可以自己运行一遍(记得不要改代码哦),另一方面,你可以给我评论,我会第一时间给你回复的哦!

代码如下:

package test;import java.io.UnsupportedEncodingException;public class Test {public static void main(String[] args) {String str = "我来做个测试,中文";System.out.println(str);System.out.println("str.length:" + str.length());System.out.println("str.getBytes().length:" + str.getBytes().length);try {System.out.println("str.getBytes('utf-8').length:" + str.getBytes("utf-8").length);System.out.println("str.getBytes('GBK').length:" +str.getBytes("GBK").length);} catch (UnsupportedEncodingException e) {e.printStackTrace();}System.out.println("--------------------------------------");String str1 = "I give the test, English";System.out.println(str1);System.out.println("str1.length:" + str1.length());System.out.println("str1.getBytes().length:" + str1.getBytes().length);try {System.out.println("str1.getBytes('utf-8').length:" + str1.getBytes("utf-8").length);System.out.println("str1.getBytes('GBK').length:" +str1.getBytes("GBK").length);} catch (UnsupportedEncodingException e) {e.printStackTrace();}}
}

第一种结果:

我来做个测试,中文

str.length:9
str.getBytes().length:27
str.getBytes('utf-8').length:27
str.getBytes('GBK').length:18
--------------------------------------
I give the test, English
str1.length:24
str1.getBytes().length:24
str1.getBytes('utf-8').length:24

str1.getBytes('GBK').length:24


第二种结果:

我来做个测试,中文
str.length:9
str.getBytes().length:18
str.getBytes('utf-8').length:27
str.getBytes('GBK').length:18
--------------------------------------
I give the test, English
str1.length:24
str1.getBytes().length:24
str1.getBytes('utf-8').length:24
str1.getBytes('GBK').length:24

这篇关于你真的了解中英文字符么--str.length()与str.getBytes().length的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/712787

相关文章

结构体和联合体的区别及说明

《结构体和联合体的区别及说明》文章主要介绍了C语言中的结构体和联合体,结构体是一种自定义的复合数据类型,可以包含多个成员,每个成员可以是不同的数据类型,联合体是一种特殊的数据结构,可以在内存中共享同一... 目录结构体和联合体的区别1. 结构体(Struct)2. 联合体(Union)3. 联合体与结构体的

什么是 Ubuntu LTS?Ubuntu LTS和普通版本区别对比

《什么是UbuntuLTS?UbuntuLTS和普通版本区别对比》UbuntuLTS是Ubuntu操作系统的一个特殊版本,旨在提供更长时间的支持和稳定性,与常规的Ubuntu版本相比,LTS版... 如果你正打算安装 Ubuntu 系统,可能会被「LTS 版本」和「普通版本」给搞得一头雾水吧?尤其是对于刚入

python中json.dumps和json.dump区别

《python中json.dumps和json.dump区别》json.dumps将Python对象序列化为JSON字符串,json.dump直接将Python对象序列化写入文件,本文就来介绍一下两个... 目录1、json.dumps和json.dump的区别2、使用 json.dumps() 然后写入文

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

native和static native区别

本文基于Hello JNI  如有疑惑,请看之前几篇文章。 native 与 static native java中 public native String helloJni();public native static String helloJniStatic();1212 JNI中 JNIEXPORT jstring JNICALL Java_com_test_g

Android fill_parent、match_parent、wrap_content三者的作用及区别

这三个属性都是用来适应视图的水平或者垂直大小,以视图的内容或尺寸为基础的布局,比精确的指定视图的范围更加方便。 1、fill_parent 设置一个视图的布局为fill_parent将强制性的使视图扩展至它父元素的大小 2、match_parent 和fill_parent一样,从字面上的意思match_parent更贴切一些,于是从2.2开始,两个属性都可以使用,但2.3版本以后的建议使

Collection List Set Map的区别和联系

Collection List Set Map的区别和联系 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文章。 有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

javascript中break与continue的区别

在javascript中,break是结束整个循环,break下面的语句不再执行了 for(let i=1;i<=5;i++){if(i===3){break}document.write(i) } 上面的代码中,当i=1时,执行打印输出语句,当i=2时,执行打印输出语句,当i=3时,遇到break了,整个循环就结束了。 执行结果是12 continue语句是停止当前循环,返回从头开始。

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令 在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository。如果采用原始直接打包放到lib目录的方式进行处理,便对项目的管理带来一些不必要的麻烦。例如版本升级后需要重新打包并,替换原有jar包等等一些额外的工作量和麻烦。为了避免这些不必要的麻烦,通常我们