【 在 finlab 的大作中提到: 】
: 是统一用string,还是wstring,还是u8 ,u16,u32这些?
: 以前用QString 可以统一处理,现在想改用标准库,不知道怎么好。
: 因为一旦选定了用哪种字符串类型,其他相关地接口中就都要用用同一种,
: ...................
这个问题怎么说呢? 首先你要明确好需求, 这种包括应用需求和平台需求,
最终还是需求和代价的折衷,utf8 很好,但是有些应用很麻烦, 32位很方便, 但是浪费空间,
windows内核需要来回转换。
平台差异, UNIX,LINUX上普遍吧wchar映射为32位,而windows平台映射到16位,
unix,linux的locale里面普遍有utf-8, windows里没有, 转码的时候,会有差异。
而应用需求,包括存储,显示,输入,转换等等。
utf8可以平台统一,没有LE,BE的麻烦,但是utf-8是变长字符存储, 需要字符长度敏感的地方,
则变得不方便, strlen只能表示存储空间,无法对应字符数量,远远不如wcslen来的方便。
utf-16存储其实也不能算是定长的,因为表示一些超出16位空间的字符编码需要使用代理表示,
这个时候是两个16位表示一个字符,本质上取长度也不能表示字符数量, 而LINUX,UNIX平台采用32位
则基本能解决这个问题, 遇到这种长度问题, 需要在应用设计的时候就进行考虑, 比如utf-8最长需要
4个字节表示一个字符, 如果设计上需要支持30个字符,存储留出至少120个字节空间(不含‘\0’), 显示的时候你也需要数出实际输入字符数, 否则, 虽然没填满空间,但屏幕已经无法显示多出的字符。
--
FROM 124.126.2.*