|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
lfxsq (lfxsq) |
★☆☆☆☆ |
-
|
普通会员 |
|
2009/9/23 13:33:57 |
标题: |
delphi的unicodestring是一个失误!? |
浏览:2519 |
|
加入我的收藏 |
楼主: |
诸位,不知对delphi的unicode支持有何看法? 我使用了一段delphi2009、2010后感觉delphi对unicode的支持方法是一个失误,主要是实现unicodestring类型且作为缺省的string是有问题的。 我认为delphi使用utf16设计unicodestring的目的就是为了方便地利用mystring[9]之类的机制直接访问unicode字符(当然还有兼容windows),但大家都知道utf16方案的unicode字符有很多都是4字节的,对于这些字符,上述方法并没有达到目的,但该方法却为大大地增加字符串的复杂性(本来就够复杂的了:ansistring shortstring widestring pchar pansichar pwidechar 字符数组 ...)。 其实,完全可以取消unicodestring,annistring就够了,我们都知道,delphi2009以后的ansistring和以前的的ansistring不同,增加了codepage域,delphi2007以前的ansistring由于没有codepage域所以无法区分各种字符集,增加此域后就完全可以兼容所有字符集,只需增加相互转换的机制就可以了(几个函数),至于Unicode字符,把utf16和utf8等编码方式作为codepage就可以轻易支持,兼容windows也一样,至于用数组方式访问字符串中的字符,其实也完全可以用函数来实现,而且意义更明确。 大家以为如何?请讨论。
----------------------------------------------
- |
作者: |
|
2009/9/23 13:51:23 |
1楼: |
不敢苟同。
----------------------------------------------
QQ: 9717005 我的Blog:http://www.cnblogs.com/anydelphi/
|
作者: |
|
2009/9/23 16:21:22 |
2楼: |
楼主所言差亦。同屏显示不同CodePage的字符咋办?
----------------------------------------------
不知周之梦为蝴蝶与,蝴蝶之梦为周与?
|
作者: |
lfxsq (lfxsq) |
★☆☆☆☆ |
-
|
普通会员 |
|
2009/9/23 16:41:20 |
3楼: |
楼主所言差亦。同屏显示不同CodePage的字符咋办? ---------- ansistring完全可以使用unicode编码,同屏显示各种codepage只需把各种codepage转换为utf16编码(前面说过,此时的codepage可标记为utf16)传给windows即可。
----------------------------------------------
-
|
作者: |
ilove (ilove) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2009/9/23 16:49:45 |
4楼: |
哈哈 吼吼
----------------------------------------------
-
|
作者: |
|
2009/9/23 16:53:51 |
3楼: |
技术上来说,AnsiString有了CodePage的确可以表示所有代码页(字符集)中的字符,但使用起来肯定更复杂、更容易混淆。(一个简单的问题,调用Windows的API的时候你敢直接用PChar转换吗?)
我个人觉得分开的好,概念上, AnsiString主要用来表示MBCS编码的字符串; UnicodeString、WideString用来表示UTF-16编码的Unicode字符串;(WideString还可以和COM里面的字符串兼容) UTF8String表示UTF-8编码的Unicode字符串(虽然UTF8String是用AnsiString实现的,但仍属于Unicode字符串)
----------------------------------------------
|
作者: |
|
2009/9/23 16:59:49 |
5楼: |
@xander, 楼主的意思应该是把string定义成: string = AnsiString(1200); // UTF-16LE 字符编码
这样的话,string就是unicode字符串了。
----------------------------------------------
|
作者: |
lfxsq (lfxsq) |
★☆☆☆☆ |
-
|
普通会员 |
|
2009/9/23 17:05:46 |
6楼: |
我以为程序员应该清楚他使用的是何种字符集,调用windows api是否需要转换也应明白,否则即使使用unicodestring恐怕也是一笔糊涂帐。
----------------------------------------------
-
|
作者: |
|
2009/9/23 20:43:21 |
7楼: |
c++里不也有wstring么
----------------------------------------------
-
|
作者: |
|
2009/9/23 21:34:54 |
8楼: |
按楼主这么说,把你所说的AnsiString存到数据库里是不是也要得把CodePage得记录下来???
楼主觉得这样可以玩下去???
----------------------------------------------
QQ: 9717005 我的Blog:http://www.cnblogs.com/anydelphi/
|
作者: |
|
2009/9/23 21:35:44 |
9楼: |
数据库里一条记录包含N种CodePage的内容,会很壮观的。
----------------------------------------------
QQ: 9717005 我的Blog:http://www.cnblogs.com/anydelphi/
|
作者: |
egust (欢迎访问 Delphi@smth.org) |
★☆☆☆☆ |
-
|
普通会员 |
|
2009/9/23 22:27:06 |
10楼: |
nt内核是unicode的,ansi版本的api都会转成unicode版本,效率相对很低 要是一开始就全世界统一的话,code page这种东西就不该存在,带来了很多麻烦,现在居然还有人死抱着code page不放
----------------------------------------------
cnblogs中我写的关于Delphi的blog,欢迎访问: http://www.cnblogs.com/egust/
|
作者: |
datm (dATM) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2009/9/24 1:05:50 |
11楼: |
nt内核是unicode的,ansi版本的api都会转成unicode版本,效率相对很低 要是一开始就全世界统一的话,code page这种东西就不该存在,带来了很多麻烦,现在居然还有人死抱着code page不放 ---------- 涉及到非常需要节省流量的时候你就不会这么想了
----------------------------------------------
-
|
作者: |
|
2009/9/24 13:07:29 |
12楼: |
我认为主要是效率问题,不然每次都需要转换很浪费时间的。
另外,回11楼:如需节省流量,则用ansi传递即可,到对方在转换回来,只损失一次效率却同样保证了需求。
----------------------------------------------
Just run it!
|
作者: |
lfxsq (lfxsq) |
★☆☆☆☆ |
-
|
普通会员 |
|
2009/9/24 15:11:30 |
13楼: |
按楼主这么说,把你所说的AnsiString存到数据库里是不是也要得把CodePage得记录下来??? ---------- 存数据库时可以存为utf8或是uft16完全。实际上,数据库的字符串如何存储和本文主题无关。
----------------------------------------------
-
|
作者: |
lfxsq (lfxsq) |
★☆☆☆☆ |
-
|
普通会员 |
|
2009/9/24 15:17:24 |
14楼: |
数据库里一条记录包含N种CodePage的内容,会很壮观的。 ---------- delphi的字符串不仅有codepag域,还有引用技术和长度域,你是否认为这些域数据库中都保存了? 数据库中字符串存储格式和delphi的字符串格式无关,其存储格式取决于程序员和驱动程序。
----------------------------------------------
-
|
作者: |
lfxsq (lfxsq) |
★☆☆☆☆ |
-
|
普通会员 |
|
2009/9/24 15:33:38 |
15楼: |
楼上有人你说code page这种东西就不该存在,不错,但事实上中国政府明确要求在中国软件必须支持国标(gb18030之类),windows底层使用unicode,表层却不用unicode而使用gb18030,为何?国家要求的!,至于还有人死抱着code page不放,是因为许多国家都有自己的标准,windows本身就抱着codepage放不下。
----------------------------------------------
-
|
作者: |
|
2009/9/24 15:50:15 |
16楼: |
UnicodeString已经不错了, 至少可以干活了。
gb18030 其实在Windows上是不可用的。别看MS“好像”已经支持它了,其实很难的。再者gb18030“基本上”可以和Unicode互换,不是特殊应用的话可以不管。我觉得挺郁闷的,谁叫OS不是中国开发的。
----------------------------------------------
-
|
作者: |
|
2009/9/24 18:06:51 |
17楼: |
delphi的字符串不仅有codepag域,还有引用技术和长度域,你是否认为这些域数据库中都保存了? 数据库中字符串存储格式和delphi的字符串格式无关,其存储格式取决于程序员和驱动程序。
----------
楼主,你想的太搞笑了吧。没错,存到数据库里可以用UTF8或UTF16。但是一个数据库管理软件或ERP,每个都要这样来转换,除了楼主以外没人会去开发软件了。
----------------------------------------------
QQ: 9717005 我的Blog:http://www.cnblogs.com/anydelphi/
|
作者: |
yxsoft (yxsoft) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2009/9/25 9:19:53 |
18楼: |
LZ自己没搞明白
----------------------------------------------
Great!
|
作者: |
learu (learu) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2009/9/25 9:34:04 |
19楼: |
LZ是来找喷的
----------------------------------------------
-
|
|