当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 10 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [讨论]令人晕菜的c++ 中英文混合string长度
帖子发表于 : 2007-11-03 22:48 
头像

注册: 2005-12-15 21:52
帖子: 351
送出感谢: 0 次
接收感谢: 0 次
前段时间分析一个html-style的文件,涉及中英文混合的字符串常量长度计算,
很自信地就按照中文2byte,英文和符号1byte的方法写了,结果完全不对。

后来只好用length方法一个个测量长度后再修正。根据length得到的结果,
几乎每个标示长度都超过我的预计,而且我还没看出其中的规律来,
请问谁知道这个字符串长度计算有什么规律?
文件是utf8格式的。


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-11-03 23:09 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
gtk?
变量定义/长度统计,都用g开头的宏。就容易了。devhelp里面找就是。别用标准的C写法。


_________________
● 鸣学


页首
 用户资料  
 
3 楼 
 文章标题 : Re: [讨论]令人晕菜的c++ 中英文混合string长度
帖子发表于 : 2007-11-03 23:39 
头像

注册: 2006-05-03 0:39
帖子: 8273
地址: المريخ
送出感谢: 0 次
接收感谢: 1
spider5 写道:
前段时间分析一个html-style的文件,涉及中英文混合的字符串常量长度计算,
很自信地就按照中文2byte,英文和符号1byte的方法写了,结果完全不对。

后来只好用length方法一个个测量长度后再修正。根据length得到的结果,
几乎每个标示长度都超过我的预计,而且我还没看出其中的规律来,
请问谁知道这个字符串长度计算有什么规律?
文件是utf8格式的。
中文2byte不是绝对的,而是要看什么编码。

例如utf8格式的中文一般是3byte的。


_________________
PHP是最好的语言!不服来战!


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2007-11-03 23:43 
头像

注册: 2006-05-03 0:39
帖子: 8273
地址: المريخ
送出感谢: 0 次
接收感谢: 1
utf8的存储是每个字符1-3字节,没有固定存储长度

例如A是一个字节,“假”是3个字节。

如果你用的C++类库对utf8的支持比较好的话,应该有直接将他们每个文字分开的功能。


_________________
PHP是最好的语言!不服来战!


页首
 用户资料  
 
5 楼 
 文章标题 : Re: [讨论]令人晕菜的c++ 中英文混合string长度
帖子发表于 : 2007-11-05 15:56 
头像

注册: 2006-02-27 20:19
帖子: 599
地址: works system
送出感谢: 0 次
接收感谢: 0 次
spider5 写道:
前段时间分析一个html-style的文件,涉及中英文混合的字符串常量长度计算,
很自信地就按照中文2byte,英文和符号1byte的方法写了,结果完全不对。

后来只好用length方法一个个测量长度后再修正。根据length得到的结果,
几乎每个标示长度都超过我的预计,而且我还没看出其中的规律来,
请问谁知道这个字符串长度计算有什么规律?
文件是utf8格式的。

你还是先看看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******


_________________
东西路,南北走
十字路口人咬狗
拿起狗来打砖头
砖头咬了狗一口
图片


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2007-11-05 16:00 
头像

注册: 2006-02-27 20:19
帖子: 599
地址: works system
送出感谢: 0 次
接收感谢: 0 次
也就是,看第一个字节的开头有多少个连续的1,这个字就占多少个字节,UTF-8 编码字符理论上可以最多到 6 个字节长, 然而 16 位 BMP 字符最多只用到 3 字节长


_________________
东西路,南北走
十字路口人咬狗
拿起狗来打砖头
砖头咬了狗一口
图片


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2007-11-06 21:17 
头像

注册: 2007-07-12 16:30
帖子: 303
地址: 桂林
送出感谢: 0 次
接收感谢: 2
好,精譬!


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2007-11-07 15:56 

注册: 2007-11-01 0:33
帖子: 39
地址: 江苏南京
送出感谢: 0 次
接收感谢: 0 次
既然LZ明知文件是UTF-8编码,为什么不先去找一下UTF-8编码的资料呢?如果不能改变自己的学习方法,以后的路很难走下去。。。


_________________
身在L营心在W


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2007-11-14 22:08 
头像

注册: 2007-04-23 17:40
帖子: 659
送出感谢: 0 次
接收感谢: 0 次
微软忒变态,整个~~~


_________________

吾生也有涯,而知也无涯,以有涯随无涯,SB啊~~~~~~~~~~


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2007-11-15 23:54 
头像

注册: 2007-10-29 22:12
帖子: 5353
地址: 江苏南京
系统: OSX 10.9 + Ub 1304
送出感谢: 0 次
接收感谢: 5
还是怪学校吧,学校教的就是英文一个字节,中文两个字节,根本也不说明是字符集的问题。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 10 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译