记php和java中英文字节长度和编码关系
2016-03-25 15:57
561 查看
1.PHP
PHP其实跟C语言一样,采用ASCII,一个char占1个字节,在GBK编码,一个英文占1个字节,一个中文占2个字节。然而在UTF-8编码下,一个英文还是占1个字节,但一个中文是占3-4个字节(一般都是3个字节),这通常会给你获取字符串的字长或者字符串截取带来麻烦。比如:<?php $str = "我爱你Iloveyou"; echo strlen($str); //utf8下是17,GBK下是14,但如果问你$str的字长是多少,或者让你显示前6个字,其余省略号表示,怎么办? ?>
以上的问题网上可以找到答案,最简单就是使用扩展库,用mb_substr函数来截取。
2.Java
java中的一个char是2个字节。java采用unicode,2个字节来表示一个字符,一个中文或英文字符的unicode编码都占2个字节,但如果采用其他编码方式,一个字符占用的字节数则各不相同。例如:public class Test { public static void main(String[] args){ String str = "我们aaaaa"; int byte_len = str.getBytes().length; int len = str.length(); System.out.println("字节长度为:" + byte_len); System.out.println("字符长度为:" + len); } }
以上例子,在GBK输出结果是:9和7,但在UTF-8下输出结果是:11和7,即无论用什么编码,用str.length()获取的字长都是一致的。该方法返回的是字符串的字符数,无论是中文字符还是英文字符,都被看做是一个字符。
相关文章推荐
- PHP连接数据库(注册页面的增删改查)
- 【服务器配置】php move_uploaded_file文件移动失败
- php 环境搭建
- ThinkPHP学习(二)
- php isset 和 array_key_exists 检查数组中是否存在某值的区别
- FragmentPagerAdapter刷新fragment
- PHP编码规范
- thinkphp M 和模板用法
- yii 标签用法(模板)
- php手册学习(2)
- ThinkPHP学习(一)
- PHP实现发送邮件的方法(基于简单邮件发送类)
- PHP遍历数组方法总结
- php 连接 postgreSql
- tftpd32:tftpd32弹出can not initialize DHCP server insuffisent privilege to run错误信息
- PHP从文件中读取字符串问题
- PHP超级全局变量总结
- thinkphp 表单一些
- php 通过ftp上传文件
- php static静态属性、java static属性变量的区别