查看完整版本: Unicode问题,等待各位答复!

5bxb 2008-4-22 10:02

Unicode问题,等待各位答复!

我阅读了不少关于这方面的资料
结果仍然一头雾水!
一个程序到底怎样才算支持Unicode啊?
我看Delphi(D7)的代码中,Canvas.TextOut使用的API是ExtTextOut
而这个ExtTextOut又分为ExtTextOutA和ExtTextOutW
我想系统会自动根据需要决定使用ExtTextOutA或者ExtTextOutW的
[color=Blue]问题1:[/color]那么为什么说Delphi又不支持Unicode呢?
我看了Delphi7的TNT控件,里面写文字的API就是DrawTextW和SetWindowTextW
[color=Blue]问题2:[/color]如果一个程序直接使用DrawText和SetWindowText,不也一样效果吗?系统不是会自动决定使用哪个API吗?
我把使用了支持Unicode的Tnt的一个标签控件,输入中文字符
然后在英文XP下一看,全是乱码
[color=Blue]问题3:[/color]支持Unicode有什么用啊?乱码还是乱码啊!
请知道的朋友解答一下,我没弄清楚这几个问题!

x_uy_u_n 2008-4-22 10:27

系统是不会自动决定使用哪个API的.例如直接使用TextOut的话, 如果你的程序#define UNICODE了,它就编译成TextOutW,如果没有,它就编译成TextOutA,EXE文件就最终用其中一个.例如你的一个文件名中包含了一个繁体的"黒"字,如果不使用UNICODE你写一个ExtractPath的功能的时候,碰到这个"黒"字它就会出问题.因为它其中一个编码是'\\'.不过我又觉得奇怪,BCB的函数似乎都不是UNICODE的,却可以正确提取出路径来.ACDSEE似乎都不是UNICODE的.

x_uy_u_n 2008-4-22 10:31

"我把使用了支持Unicode的Tnt的一个标签控件,输入中文字符
然后在英文XP下一看,全是乱码"关于这个,应该是字库的问题,中文字的问题还不大.韩文就有问题了.如果韩文,你不用UNICODE,就算你有韩文的字库,它都是乱码.如果你用了UNICODE并且有韩文的字库.它就可以正确显示.

x_uy_u_n 2008-4-22 10:48

DELPHI封装得太那个了,或者是作者之前没有考虑好UNICODE的问题.很多类都是ANSI的.无法通过简单的#define UNICODE之类的办法就实现全UNICODE的支持.在下写用C的写UNICODE的程序有一段时间了.发现不仅仅是SetWindowText那些分SetWindowTextA和SetWindowTextW,甚至连SendMessage也分SendMessageA和SendMessageW,当然还有DefWindowProc函数了.

5bxb 2008-4-22 11:22

[quote]原帖由 [i]x_uy_u_n[/i] 于 2008-4-22 10:48 发表 [url=http://www.cnsw.org/bbs/redirect.php?goto=findpost&pid=349226&ptid=80523][img]http://www.cnsw.org/bbs/images/common/back.gif[/img][/url]
DELPHI封装得太那个了,或者是作者之前没有考虑好UNICODE的问题.很多类都是ANSI的.无法通过简单的#define UNICODE之类的办法就实现全UNICODE的支持.在下写用C的写UNICODE的程序有一段时间了.发现不仅仅是SetWindowTex ... [/quote]

x_uy_u_n好谦虚哦,居然跟我说在下,;P
经过你这么一讲解,我基本明白了!
明天的分就全给你啦,现在我所有评分用完了!
太感谢了!:kiss:

player1 2008-4-22 11:44

这个问题水会长很清楚:lol

浅释 2008-4-22 15:23

进来学习的

vender 2008-4-27 02:06

delphi7在unicode方面确实比较令人头疼

cm4ever 2008-4-27 07:26

Borland在C++ Builder中提供ITE库处理多国语言,估计Delphi用的也是同一套,在帮助文件列表中可以找到说明

Integrated Translation Environment

CodeCoolie 2008-4-30 12:59

我前阵子研究过一段时间,基本搞明白了,不过现在懒得打字。。。:Q

看看看.com 2008-5-2 16:24

1.W系列函数或win api是支持unicode的,这个不用质疑了.至于你说的TExtout的W和A函数,只是delphi提供的部分零散模块,解决不了程序中所有的unicode问题,所以你需要用相对好一点的Tnt系列控件.
2.tnt内部肯定用了W系列的api和函数,这样才能尽可能的对unicode提供支持,所以相对delphi内部要做得好一些.
3.支持unicode当然有用,首先你的英文系统中得有相应的字库,这样才能正确显示中文.但尚若你的系统中有中文字库,但程序内部不支持unicode,仍然用A系列的函数,这样即使操作系统支持中文字库也不能正确显示,除非你在全中文环境下,或全日文环境下,或其它单一的语言系统环境下.
PS:其实支持unicode没有什么用的,吃不到的萄萄总是想吃的,我倒觉得,程序还是不要用什么外部控件,不要用什么多国语言,比较统一化,简单化,利于不断的版本升级和管理.谢谢大家!

CodeCoolie 2008-5-3 09:56

楼上的解答问题。。。罕见啊。。。:victory:

看看看.com 2008-5-4 08:35

是的,开天辟地的我花了一些时间来打字,解答5xbox小伙的问题。因为这个小伙比较踏实,肯干。
页: [1]
查看完整版本: Unicode问题,等待各位答复!