一个汉字=2个英文字符么?我肤浅的这么认为。

如题包含2个意思:

  1. 通常所说的一个汉字2个字节,一个英文字符1个字节。
  2. 一个汉字的显示宽度等于两个英文字符的显示宽度。

一.编码问题
这在正常编码里是这样的,所谓正常编码也就是ANSI,我们用NOTEPAD.EXE打开一个TXT文档,另存为的时候可以看到这个文档的编码格式,这种编码汉字用2个字节,英文字符1个字节,但是这种格式不够通用,最简单的举例比如一个字符串:(ANSI)

  • "ABC",那么"ABC".length()=3
  • "阿BC",那么"阿BC".length()=?

所以为了解决这个问题,有了unicode编码,所有字符一律用2个字节表示,这样就好办多了,如上例:(Unicode)

  • "ABC",那么"ABC".length()=3
  • "阿BC",那么"阿BC".length()=3

可是所有的英文字符也都用2个字节表示岂不是太浪费?一个纯英文的文档用unicode保存得大了一倍,所以又有了UTF-8的编码,英文、数字、符号的存储还是1个字节,其他用2个字节,这样就大大的节省存储空间了,还是上例:(UTF-8)

  • "ABC",那么"ABC".length()=3
  • "阿BC",那么"阿BC".length()=3

所以在各种编程环境中几乎都引入了Unicode,并且用Unicode编码来处理字符以增强通用性。从Java的一次编译到处使用的特性就知道它是使用Unicode来处理字符的。

关于Unicode的代码,http://www.unicode.org/charts/这个网址有列表,看了以后大有帮助。

二.显示问题。
直到昨天我在调试我的JBookMaker时才发现并不是所有的手机显示里面都是,以下列举的是不全面的。

  • 一个汉字宽度 = 两个英文宽度
  • 大写英文宽度 = 小写英文宽度的

这就知道为什么有的手机用户报告说最右边经常只显示一半,另一半字应该在屏幕外面了。我做了个小小的测试程序放到各手机模拟器里,发现有的手机里面确实是如上所列情况,如西门子,Nokia,有的却不尽然,如摩托罗拉,索爱。拿索爱Z500举例:

  • 系统中字体:一个汉字:11,一个大写英文:8,小写英文:6
  • 系统中字体:一个汉字:14,一个大写英文:9,小写英文:8
  • 系统小字体:一个汉字:9,一个大写英文:6,小写英文:5

所以编程时不能那么想当然的认为,还是得"实践出真知"啊。


- 作者: Bigwater 2004年11月18日, 星期四 13:35 加入博采



原文地址:https://www.cnblogs.com/kevinzhwl/p/3878916.html