[讨论]令人晕菜的c++ 中英文混合string长度
- spider5
- 帖子: 351
- 注册时间: 2005-12-15 21:52
[讨论]令人晕菜的c++ 中英文混合string长度
前段时间分析一个html-style的文件,涉及中英文混合的字符串常量长度计算,
很自信地就按照中文2byte,英文和符号1byte的方法写了,结果完全不对。
后来只好用length方法一个个测量长度后再修正。根据length得到的结果,
几乎每个标示长度都超过我的预计,而且我还没看出其中的规律来,
请问谁知道这个字符串长度计算有什么规律?
文件是utf8格式的。
很自信地就按照中文2byte,英文和符号1byte的方法写了,结果完全不对。
后来只好用length方法一个个测量长度后再修正。根据length得到的结果,
几乎每个标示长度都超过我的预计,而且我还没看出其中的规律来,
请问谁知道这个字符串长度计算有什么规律?
文件是utf8格式的。
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
- stlxv
- 论坛版主
- 帖子: 8275
- 注册时间: 2006-05-03 0:39
- 来自: المريخ
Re: [讨论]令人晕菜的c++ 中英文混合string长度
中文2byte不是绝对的,而是要看什么编码。spider5 写了:前段时间分析一个html-style的文件,涉及中英文混合的字符串常量长度计算,
很自信地就按照中文2byte,英文和符号1byte的方法写了,结果完全不对。
后来只好用length方法一个个测量长度后再修正。根据length得到的结果,
几乎每个标示长度都超过我的预计,而且我还没看出其中的规律来,
请问谁知道这个字符串长度计算有什么规律?
文件是utf8格式的。
例如utf8格式的中文一般是3byte的。
PHP是最好的语言!不服来战!
- stlxv
- 论坛版主
- 帖子: 8275
- 注册时间: 2006-05-03 0:39
- 来自: المريخ
- madoldman
- 帖子: 599
- 注册时间: 2006-02-27 20:19
- 来自: works system
- 联系:
Re: [讨论]令人晕菜的c++ 中英文混合string长度
你还是先看看utf8编码的格式吧spider5 写了:前段时间分析一个html-style的文件,涉及中英文混合的字符串常量长度计算,
很自信地就按照中文2byte,英文和符号1byte的方法写了,结果完全不对。
后来只好用length方法一个个测量长度后再修正。根据length得到的结果,
几乎每个标示长度都超过我的预计,而且我还没看出其中的规律来,
请问谁知道这个字符串长度计算有什么规律?
文件是utf8格式的。
以下文字转自http://dev.csdn.net/article/40/40146.shtm
因为一个字母还有一些键盘上的符号加起来只用二进制七位就可以表示出来,而一个字节就是八位,所以UTF8就用一个字节来表式字母和一些键盘上的符号。然而当我们拿到被编码后的一个字节后怎么知道它的组成?它有可能是英文字母的一个字节,也有可能是汉字的三个字节中的一个字节!所以,UTF8是有标志位的!
当要表示的内容是 7位 的时候就用一个字节:0******* 第一个0为标志位,剩下的空间正好可以表示ASCII 0-127 的内容。
当要表示的内容在 8 到 11 位的时候就用两个字节:110***** 10****** 第一个字节的110和第二个字节的10为标志位。
当要表示的内容在 12 到 16 位的时候就用三个字节:1110***** 10****** 10****** 和上面一样,第一个字节的1110和第二、三个字节的10都是标志位,剩下的空间正好可以表示汉字。
以此类推:
四个字节:11110**** 10****** 10****** 10******
五个字节:111110*** 10****** 10****** 10****** 10******
六个字节:1111110** 10****** 10****** 10****** 10****** 10******
东西路,南北走
十字路口人咬狗
拿起狗来打砖头
砖头咬了狗一口
十字路口人咬狗
拿起狗来打砖头
砖头咬了狗一口
- madoldman
- 帖子: 599
- 注册时间: 2006-02-27 20:19
- 来自: works system
- 联系:
-
- 帖子: 39
- 注册时间: 2007-11-01 0:33
- 来自: 江苏南京
- hubert_star
- 论坛版主
- 帖子: 5373
- 注册时间: 2007-10-29 22:12
- 系统: OSX 10.9 + Ub 1304
- 来自: 江苏南京