> 2.和界面相关的是否需要使用宽字节的?
如果你的应用程序非常明确只在一种语言的操作系统上使用,
(例如只在中文操作系统下使用,或只在日文操作系统下使用。)
那么编译成非UNICODE内核是可行的方案。
如果你想要让应用程序在中文OS或日文OS下都能正常显示及操作,
请编译成UNICODE内核。
PS:
使用C++制作共通库时,
如果声明的接口使用std::string,编译时必须使用非UNICODE内核;
如果声明的接口使用std::wstring,编译时必须使用UNICODE内核;
如果声明的接口使用BSTR时,编译时两种内核都可以。
使用那一种由你选择。
上述说明如果有异议,请指正。
2010/3/10 haozes <hao...@gmail.com>:
我们希望跨平台,所以标准化在UTF-8/string上。最近刚写了一大堆在UTF-8、
ANSI string和wchar_t string之间转换的类和函数。
2010/3/10 Yuan Liu <xiaol...@gmail.com>:
> 我个人的意见:
> 不考虑大规模数据存储和数据网络传输的话,使用某种Unicode,全部用wchar挺好,操作简单
> 如果是大量数据,需要考虑存储空间以及传输延迟的话,在存储或者传输之前,把Unicode变成变长编码就行(即内码和外码)
> 其实关键要分清概念:字符集和编码
>
> 2010/3/10 Jeffrey Zhao <je...@live.com>
>>
>> 我基本不懂这些,不过这年代用Unicode是标配了吧......
--
Wu Yongwei
URL: http://wyw.dcweb.cn/
我个人建议在程序内部使用定长字符编码,也就是utf16或者gbk甚至像风云那样自己创造,好处是在需要做池存储或者字符串分段引用时,容易计算偏移
长度。而输入输出应该统一使用utf8,好处是一批标准函数(不是所有)不做任何修改就可以操作utf8,而且这种编码对于英文是最节省空间的(可惜对
中文不是)。
当你明确了你是要用什么文字编码之后,再去谈用什么字符串实现。基本上CString(要看tchar的定义)和wchar都是用来存定长字符串编码
(utf16或者gbk),而char一般拿来存ansi或者utf8,存utf8时需要考虑配套api是否能支持utf8(主要是不能直接使用定长偏
移操作。)
On Mar 10, 10:05 pm, Yongwei Wu <wuyong...@gmail.com> wrote:
> 还有,需不需要跨平台?
>
> 我们希望跨平台,所以标准化在UTF-8/string上。最近刚写了一大堆在UTF-8、
> ANSI string和wchar_t string之间转换的类和函数。
>
> 2010/3/10 Yuan Liu <xiaolang...@gmail.com>:
>
>
>
>
>
> > 我个人的意见:
> > 不考虑大规模数据存储和数据网络传输的话,使用某种Unicode,全部用wchar挺好,操作简单
> > 如果是大量数据,需要考虑存储空间以及传输延迟的话,在存储或者传输之前,把Unicode变成变长编码就行(即内码和外码)
> > 其实关键要分清概念:字符集和编码
>
> > 2010/3/10 Jeffrey Zhao <je...@live.com>
>
> >> 我基本不懂这些,不过这年代用Unicode是标配了吧......
> >> Jeffrey Zhao
> >> Blog:http://www.cnblogs.com/JeffreyZhao/
> >> Twitter:https://twitter.com/jeffz_cn
> >> From: haozes
> >> Sent: Wednesday, March 10, 2010 10:10 AM
> >> To: pongba
> >> Subject: [TL][初级]用CString还是std::wstring/std::string
> >> 我是个C/C++初学者,正打算用WTL写个的工具练习.在字符串使用方面比较迷惑,搜索了半天和别人讨论了感觉还是没有找到答案.在此冒昧请教下大家:
> >> 有人告诉我:
> >> 1.STL与Windows系列的库混用有风险的,需要考虑到的细节太多。
> >> 2.要么用stl,要么用Windows的库,不要混用。
> >> 却没有在哪些方面有风险,和为什么
> >> --------------
> >> 先说我不想用CString的理由:
> >> 1.我在WTL的类库里面有用字符串相关的函数的情况,都是LPCTSTR 之类的.没有直接用CString.这种情况下,CString不是必须.
> >> 2.经过比较,我决定放弃使用TCHAR类型的函数,工程使用Unicode.我感觉这样更清晰,T类型的函数让我更迷惑,要不使用char*
> >> string要不就用wchar_t*,wstring.更简单的.
>
> >> 3.我在使用一些网上的开源库的时候,别人的代码都是std:string.如果我使用CString.会带来很多转换.很ugly.这牵涉到我声明的函数接口 ,还有对象的定义到底是什么,
> >> 总不至于用char*/wchar_t*参数吧.
>
> >> 4.据说Chrome用了WTL.我搜索了下Chrome里面,瞅了一眼,压根没到CString.和界面相关的东西,Chrome使用的字符串都是wstri ng/wchar_t宽的,
问题是,UTF-16并非定长。你只处理常用中文的话没问题,需要处理古文字或者
需要国际化就不行了。
GBK也不是定长,长度是一字节或两字节。GB18030就更搞了,一字节或两字节或
四字节。
真正定长的只有UCS-2(只能处理Unicode的一个子集)和UTF-32(四字节)。
Linux环境下wchar_t一般定义为四字节,UTF-32。
> 样自己创造,好处是在需要做池存储或者字符串分段引用时,容易计算偏移长
> 度。而输入输出应该统一使用utf8,好处是一批标准函数(不是所有)不做任
> 何修改就可以操作utf8,而且这种编码对于英文是最节省空间的(可惜对中文
> 不是)。
>
> 当你明确了你是要用什么文字编码之后,再去谈用什么字符串实现。基本上
> CString(要看tchar的定义)和wchar都是用来存定长字符串编码(utf16或者
> gbk),而char一般拿来存ansi或者utf8,存utf8时需要考虑配套api是否能支
> 持utf8(主要是不能直接使用定长偏移操作。)
你说的这些都不是定长编码。除非你在西文平台上,ANSI=ISO-8859-1。
utf16严格来讲确实是不定长的,但是一般用的时候都当定长用。
utf32一般很少见到工程中用的。
说的不够严谨,多谢指正。
On Mar 11, 11:12 am, Yongwei Wu <wuyong...@gmail.com> wrote:
> 2010/3/11 Googol Lee <googol...@gmail.com>:
当然,一开始就跨平台的项目可能不这么做。ICU也缺省内部使用UTF-16。
Windows开发如果希望好的国际化的话,可以考虑使用ICU。除非你使用UTF-32,
一个字符可能超过一个字符单位(char、TCHAR、UChar,甚至Windows上的
wchar_t)。
2010/3/11 Googol Lee <goog...@gmail.com>: