你真的了解中英文字符么--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

相关文章

MyBatis中$与#的区别解析

《MyBatis中$与#的区别解析》文章浏览阅读314次,点赞4次,收藏6次。MyBatis使用#{}作为参数占位符时,会创建预处理语句(PreparedStatement),并将参数值作为预处理语句... 目录一、介绍二、sql注入风险实例一、介绍#(井号):MyBATis使用#{}作为参数占位符时,会

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

C++中NULL与nullptr的区别小结

《C++中NULL与nullptr的区别小结》本文介绍了C++编程中NULL与nullptr的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录C++98空值——NULLC++11空值——nullptr区别对比示例 C++98空值——NUL

Conda与Python venv虚拟环境的区别与使用方法详解

《Conda与Pythonvenv虚拟环境的区别与使用方法详解》随着Python社区的成长,虚拟环境的概念和技术也在不断发展,:本文主要介绍Conda与Pythonvenv虚拟环境的区别与使用... 目录前言一、Conda 与 python venv 的核心区别1. Conda 的特点2. Python v

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

Before和BeforeClass的区别及说明

《Before和BeforeClass的区别及说明》:本文主要介绍Before和BeforeClass的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Before和BeforeClass的区别一个简单的例子当运行这个测试类时总结Before和Befor

C#如何去掉文件夹或文件名非法字符

《C#如何去掉文件夹或文件名非法字符》:本文主要介绍C#如何去掉文件夹或文件名非法字符的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#去掉文件夹或文件名非法字符net类库提供了非法字符的数组这里还有个小窍门总结C#去掉文件夹或文件名非法字符实现有输入字