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

  • 主题发起人 主题发起人 jiichen
  • 开始时间 开始时间
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 应
会有所助益。
 
都是windows的事, 和delphi无关.
1. 说明riched32.dll不支持unicode
2. a取的是当前操作系统中"啊"字的内码, 如果你用简体中文, 它就是$b0a1, 没什么可奇怪的.
 
Try to change the font property of the text, it maybe work.
 
RichEdit 好像有先天之限制,不管字体怎么改,
编码方式是依 Windows 版本而定。
感兴趣的是,要如何做出像 Win2000 内的记事本、
WordPad一般,可看见简体与繁体同在一视窗内存在?
它的原理似乎是以 UniCode 来做显示,但我不了解的是
核心为 UniCode 还好懂,但是显示界面要使用哪套字体,
它支援 UniCode???
 
附加功能 将问题提前
 
你察看一下Richedit*.dll的版本号,如果是3.0的就应该支持unicode,3.0以前的不支持
,不过win2000的RichEdit应该是3.0的啊??
 
在 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) 是預設使用哪個檔呢?
 
unicode是一套通用的编码方法,其中分几大类,比如西欧、东欧、远东等,
并不是按国家来分的。
unicode的每一类地区编码中的字符都是不重复的,比如远东,其中包括的简体中文、
繁体中文、HZ, 日文等编码都不重叠。
这就不难解释为什么notepad可以同时显示简体中文和繁体中文了。
至于你的程序嘛,我估计是Delphi的环境没设置好,不要选$0804的语言集(选项中的locale ID),
好象要设成$0000(natural)的才行。不过没试过。
 
To Iknow
抱歉!還是不行,沒有 $0000 的選項,強制寫入亦遭拒絕,
為達客觀,我是選用 Delphi5 的 Demos 中的 RichEdit
來作測試。
先至一簡體站,複製其文字後貼上 NotePad ,
再至一繁體站,複製文字後貼上 NotePad ,再利用
NotePad 的 Unicode 方法存檔,這樣便有一夾雜簡繁
文字的文字檔了。
再 Dlephi 裡頭選擇 Locale ID:$0409 英語(美國)
並將 RichEdit1 的 Font 設成 Microsoft Sans Serif
字集(Charset) 設成 西歐(因找無遠東),
結果還是不行,除此之外,有其他要注意的嗎?
還是誰有成功之例子呢?
 
vb6上有同样的问题
 
我直接用
richedit1.Lines.Add('卻顯示一堆亂碼!');
richedit1.Lines.Add('这是一个测试!');
结果显示正常,Riched*.dll与上面相同。
 
多人接受答案了。
 
后退
顶部