Blue
Red
Green
Orange
Voilet
Slate
Dark

请问 UniCode 的表现方式?(100分)

J

jiichen

Unregistered / Unconfirmed
GUEST, unregistred user!
请问 UniCode 的表现方式?
目前使用的系统为繁体 Windows 2000 ,其支援 UniCode ,
像记事本或 WordPad 可在上面同时存在繁体字及简体字,
而我所使用的字型为细明体。

问题一为:为何它可同时表现出两种不同的字型,而 Delphi
中的 RichEdit 却只支援繁体字型,遇到简体字型便出现 '?'
来表示!
我只知道 UniCode 是一套可支援多国语系的特殊
编码,根据编码可容纳 65535 的字,虽然我可读取 UniCode
的档案,读入时在将其转码成繁体字,但遇见内含简体字的话,
便是乱码一堆。:(
转码方法为利用 WideCharLenToString 来转码,这里又延伸出一个
问题,想请教使用简体中文 Windows 2000 的高手.

问题二:
var
a:string;
w:WideString;

a:='啊';

// 使用繁体中文的朋友,a 的值应为 $b0da
// 使用简体中文的朋友,a 的值应为 $b0a1,这就是我的第二个问题!
w:=WideString(a);
// 此时 w 的值应为 $554a

// 如果不方便使用 Delphi 内建看到值得话,
// 请使用下列的语法
a:='啊';
S:=(a+' : BIG5 code : '+IntToHex(Byte(a[1]),2)+IntToHex(Byte(a[2]),2));
b:=WideString(a);
S:=S+#13#10+(b+' : Unicode : '+ IntToHex(Word(b[1]),2));
ShowMessage(s);
// 这里可看见

如果简体中文的朋友们,您们的答案是 a=$b0a1 的话,
而且又使用 Delphi 5 英文版的话,那问题就是
为何相同的设计工具下,又有着相同的语法,却会
产生不同 a 的值,是 MS 的问题,或是 Delphi 藏一手?

这问题如果解决的话,对于 UniCode <--> GBK、或是 UniCode <--> Big5 应
会有所助益。
 
A

Another_eYes

Unregistered / Unconfirmed
GUEST, unregistred user!
都是windows的事, 和delphi无关.
1. 说明riched32.dll不支持unicode
2. a取的是当前操作系统中"啊"字的内码, 如果你用简体中文, 它就是$b0a1, 没什么可奇怪的.
 
M

mud_glory

Unregistered / Unconfirmed
GUEST, unregistred user!
Try to change the font property of the text, it maybe work.
 
J

jiichen

Unregistered / Unconfirmed
GUEST, unregistred user!
RichEdit 好像有先天之限制,不管字体怎么改,
编码方式是依 Windows 版本而定。
感兴趣的是,要如何做出像 Win2000 内的记事本、
WordPad一般,可看见简体与繁体同在一视窗内存在?
它的原理似乎是以 UniCode 来做显示,但我不了解的是
核心为 UniCode 还好懂,但是显示界面要使用哪套字体,
它支援 UniCode???
 
W

wjiachun

Unregistered / Unconfirmed
GUEST, unregistred user!
附加功能 将问题提前
 
A

akju

Unregistered / Unconfirmed
GUEST, unregistred user!
你察看一下Richedit*.dll的版本号,如果是3.0的就应该支持unicode,3.0以前的不支持
,不过win2000的RichEdit应该是3.0的啊??
 
J

jiichen

Unregistered / Unconfirmed
GUEST, unregistred user!
在 Winnt/System32 下有兩個檔案
RichEd20.dll
的確為 v3.0 版本,
語系:中性語言
說明:Rich Text Edit Control, v3.0
但為何無法使用 Unicode 呢?
有試過 TLabel ,只需將 Font 改成 GB2312 及使用宋體
便可顯示出『可閱讀』之簡體字體;但是 Delphi 的 TRichEdit
卻顯示一堆亂碼!
&amp;

RichEd32.dll
此檔版本為 5.00.2134.1
語系:英語 (美國)
說明:Wrapper Dll for Richedit 1.0
不知是什麼東東?
順便請問此二檔有何差異?
Delphi(或說是 Windows) 是預設使用哪個檔呢?
 
I

Iknow

Unregistered / Unconfirmed
GUEST, unregistred user!
unicode是一套通用的编码方法,其中分几大类,比如西欧、东欧、远东等,
并不是按国家来分的。
unicode的每一类地区编码中的字符都是不重复的,比如远东,其中包括的简体中文、
繁体中文、HZ, 日文等编码都不重叠。
这就不难解释为什么notepad可以同时显示简体中文和繁体中文了。
至于你的程序嘛,我估计是Delphi的环境没设置好,不要选$0804的语言集(选项中的locale ID),
好象要设成$0000(natural)的才行。不过没试过。
 
J

jiichen

Unregistered / Unconfirmed
GUEST, unregistred user!
To Iknow
抱歉!還是不行,沒有 $0000 的選項,強制寫入亦遭拒絕,
為達客觀,我是選用 Delphi5 的 Demos 中的 RichEdit
來作測試。
先至一簡體站,複製其文字後貼上 NotePad ,
再至一繁體站,複製文字後貼上 NotePad ,再利用
NotePad 的 Unicode 方法存檔,這樣便有一夾雜簡繁
文字的文字檔了。
再 Dlephi 裡頭選擇 Locale ID:$0409 英語(美國)
並將 RichEdit1 的 Font 設成 Microsoft Sans Serif
字集(Charset) 設成 西歐(因找無遠東),
結果還是不行,除此之外,有其他要注意的嗎?
還是誰有成功之例子呢?
 
G

g622

Unregistered / Unconfirmed
GUEST, unregistred user!
vb6上有同样的问题
 
L

lli

Unregistered / Unconfirmed
GUEST, unregistred user!
我直接用
richedit1.Lines.Add('卻顯示一堆亂碼!');
richedit1.Lines.Add('这是一个测试!');
结果显示正常,Riched*.dll与上面相同。
 
W

wjiachun

Unregistered / Unconfirmed
GUEST, unregistred user!
多人接受答案了。
 
顶部 底部