越南文存入Oracle |
尚未結案
|
u2462
一般會員 發表:3 回覆:7 積分:2 註冊:2002-07-18 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
引言: 以越南文輸入文字(Unicode) 並存入Oracle,但讀出時則為Ansi code 請問該如何設定,請幫忙寫入及讀取端之 NLS_LANG (registry HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0/NLS_LANG) 是什麼值 ? 檢查 Oracle DataBase 的 CharacterSet 1. SQL : select * from SYS.NLS_DATABASE_PARAMETERS; 2. Check : NLS_CHARACTERSET='UTF8' ? 如果不是, 就比較頭大 /* Free 和 Create 一樣重要 */ |
u2462
一般會員 發表:3 回覆:7 積分:2 註冊:2002-07-18 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
u2462 你好 : 你真辛苦, 現在就遇上 UniCode 的問題. 言歸正傳, 1. OS Code Page 950 ( NLS_CHARACTER = 'ZHT16BIG5' or 'ZHT16MSWIN950'), 卻須"硬"送 unicode character, 據我所知 Oracle NLS ( National Language Support ), "一定"會強制 Translate Character, 所以我目前用 raw datatype, 以避免 Oracle NLS Translate. (不一定好,參考參考; 好處是可以自行控管 Data CharacterSet, 不用管 Server/Client 是何種 CharacterSet , 但也喪失方便性) 2. 用 raw datatype, 當然有些不方便, 寫進前/讀出後 都須自行處理 data. (還好只是幾個Column) 3. 若用 raw datatype, Oracle "standard" package 中 "rawtohex" 很好用, 希望有幫助. 上述之 package 是 build-in, PL/SQL 如: select rawtohex([RawColumnName]) from [TableName] where... // return string with Hex Format 4. 你可用 Oracle "utl_raw" package 中 "cast_to_varchar2" 及 "cast_to_raw" function, check 目前於 DB Server 中之 Data , 是否正確為 unicode, 如 : select utl_raw.cast_to_raw([CharColumnName]) from [TableName] where... 5. 至於 raw data 讀出後, 如何 display ? 據我所知 Delphi 大部分的 VCL, 都不支援 unicode, (我想是 unicode 資訊環境尚未完全成熟 Delphi 不想全面跟進) 6. 目前我是用 WebBrowser 藉由 html escape character 如: '窓' // Hex : 7A93 去 display unicode character. 7. nchar datatype 我實際沒用過, 抱歉無法幫上忙, 據我所知 它是 unicode datatype, 但因第 1. 點, 所以可能仍會有問題. 8. 天使大大, 可是 unicode 專家, 可以問問他./* Free 和 Create 一樣重要 */ |
u2462
一般會員 發表:3 回覆:7 積分:2 註冊:2002-07-18 發送簡訊給我 |
|
u2462
一般會員 發表:3 回覆:7 積分:2 註冊:2002-07-18 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
引言: 請問以Raw方式存入Oracle 要以何種方式Show出?以 HTML 而言 : 須將 Binary Data format 成 Integer (2 bytes). For Example : '7A93' = 122 X 256 147 = 31379 HTML text : '' '31379' ';' Sample Code as following: PageProducer.HTMLDoc ... <meta http-equiv="Content-Type" content="text/html; charset=big5"> ... <#test> ... PageProducer.OnHTMLTag Event procedure TForm1.PageProducer1HTMLTag(Sender: TObject; Tag: TTag; const TagString: String; TagParams: TStrings; var ReplaceText: String); var i : array of integer; sz,code,j : integer; v:variant; begin if tagstring='test' then begin v := TVarBytesField(Query1.Fields[0]).asvariant; sz := Trunc(Sizeof(v)/2); SetLength(i,sz); i := v; replacetext := ''; for j := 0 to sz - 1 do begin code := i[j*2 1]*256 i[j*2]; replacetext:=replacetext '' inttostr(code) ';'; end; end; end; 引言: 另Unicode存入Oracle該如何處理?Sample Code as following : var m : TMemoryStream; Buffer : array of Byte; Size : LongInt; begin m := TMemoryStream.Create; try m.LoadFromFile('d:\dum.txt'); m.Position := 2; // Bybass 2 bytes of Unicode File identifier $FFFE Size := m.Size - 2; SetLength(Buffer,Size); m.Read(Buffer[0],Size); with query1 do begin append; TVarBytesField(fieldbyname('C1')).Value := Buffer; post; end; finally m.Free; end; end;/* Free 和 Create 一樣重要 */ 發表人 - Mickey 於 2003/03/04 09:14:37 發表人 - Mickey 於 2003/03/04 09:17:30 發表人 - Mickey 於 2003/03/04 09:21:33 |
bookworm
中階會員 發表:63 回覆:161 積分:82 註冊:2002-08-03 發送簡訊給我 |
不知道用unicode component會不會比較乾脆?
http://home.ccci.org/wolbrink/tnt/delphi_unicode_controls.htm
有空的話試試吧... =======================
二星級新手,問基礎問題請勿見笑 ^^
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |