VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

轉換字碼的問題

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
nelsonchuang



註冊時間: 2003-09-04
文章: 563
來自: 臺灣

第 1 樓

發表發表於: 星期一 四月 15, 2013 4:33 pm    文章主題: 轉換字碼的問題 引言回覆

個人有一事想請教一下各位:
我在一個表單中,有使用一個richtext物件,以儲存一些文字,常常會從大陸網站上複製文字,貼到richtext物件中,但是這些字都是繁體字,其中也包含了像是「潙、㤆、𠄣」這樣的字體。
如果我把複製的字體,直接貼上richtext物件中,會出現??的樣子,可是若是我把他們貼到word之後,再複製,再貼上richtext物件中,就會顯示正常。
個人曾試著使用scrconv()進行轉換,似乎沒什麼效果,想請問一下大家,我是不是漏了什麼步驟,可否指點一二?在此感謝∼

_________________
大家好,請多指教
回頂端
檢視會員個人資料 發送私人訊息
ckp6250



註冊時間: 2004-07-30
文章: 1645


第 2 樓

發表發表於: 星期一 四月 15, 2013 6:22 pm    文章主題: 引言回覆

問題應該出在 vfp 的 _CLIPTEXT 在處理 Big5 與 unicode 之間轉換時出槌所致。
之前我在測試 vfp on wine 時,也吃足類似苦頭。

不能直接使用_CLIPTEXT,要改用 windows api 去轉換。

請您參考一下本站上的文章

http://vfp.sunyear.com.tw/viewtopic.php?t=4952&highlight=CopyUnicodeText2Clipboard

應該有解才對。
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
nelsonchuang



註冊時間: 2003-09-04
文章: 563
來自: 臺灣

第 3 樓

發表發表於: 星期一 四月 15, 2013 7:57 pm    文章主題: 引言回覆

ckp6250 寫到:
問題應該出在 vfp 的 _CLIPTEXT 在處理 Big5 與 unicode 之間轉換時出槌所致。
之前我在測試 vfp on wine 時,也吃足類似苦頭。

不能直接使用_CLIPTEXT,要改用 windows api 去轉換。

請您參考一下本站上的文章

http://vfp.sunyear.com.tw/viewtopic.php?t=4952&highlight=CopyUnicodeText2Clipboard

應該有解才對。

感謝回應,藉由您的回應資料,我找到這一篇
http://www.news2news.com/vfp/?example=316&function=42&PHPSESSID=eb4b1234ea2fda6142d5743337b732f7
,但是問題來了,我要怎樣子,才能把轉好的資料,貼到richtext物件中?還在想....
(然而以下的程式,是會連rtf的格式都會拿掉......)

#DEFINE CF_UNICODETEXT 13
DO decl

LOCAL hData, lcUnicode

IF OpenClipboard(0) <> 0
IF IsClipboardFormatAvailable(CF_UNICODETEXT) <> 0
hData = GetClipboardData (CF_UNICODETEXT)
lcUnicode = memwchar2str(hData)
* ? uconv (lcUnicode, 866) && code page 866
? uconv (lcUnicode, 1251) && code page 1251 &&臺灣是950
ELSE
? "No Unicode data available."
ENDIF
= CloseClipboard() && the must
ENDIF
* end of main

FUNCTION uconv (lcSrc, lnCodePage)
LOCAL lcDst, lnUsedDefault, lnResult
lcDst = Repli(Chr(0), Len(lcSrc) * 2)
lnUsedDefault = 0

lnResult = WideCharToMultiByte (lnCodePage, 0,;
lcSrc, Len(lcSrc),;
@lcDst, Len(lcDst), "?", 0)

IF lnResult = 0
* 87 - ERROR_INVALID_PARAMETER
* 122 - ERROR_INSUFFICIENT_BUFFER
* 1004 - ERROR_INVALID_FLAGS
? "Error code:", GetLastError()
lcDst = ""
ELSE
lcDst = SUBSTR(lcDst, 1, lnResult)
ENDIF
RETURN SUBSTR(lcDst, 1, AT(Chr(0),lcDst)-1)

FUNCTION memwchar2str (lnMemBlock)
* copies Unicode characters (two-byte) from a memory address to a VFP string
RETURN mem2str(lnMemBlock, Chr(0)+Chr(0))

FUNCTION mem2str(lnMemBlock, end_sequence)
#DEFINE BUFFER_SIZE 16
#DEFINE EMPTY_BUFFER Repli(Chr(0), BUFFER_SIZE)

DECLARE RtlMoveMemory IN kernel32 As Heap2Str;
STRING @, INTEGER, INTEGER

LOCAL lnPtr, lcResult, lcBuffer, lnPos
lnPtr = lnMemBlock
lcResult = ""

DO WHILE .T.
lcBuffer = EMPTY_BUFFER
= Heap2Str (@lcBuffer, lnPtr, BUFFER_SIZE)
lnPos = AT(end_sequence, lcBuffer)
IF lnPos > 0
lcResult = lcResult + SUBSTR(lcBuffer, 1, lnPos-1)
RETURN lcResult
ELSE
lcResult = lcResult + lcBuffer
lnPtr = lnPtr + BUFFER_SIZE
ENDIF
ENDDO

PROCEDURE decl
DECLARE INTEGER GetLastError IN kernel32
DECLARE INTEGER OpenClipboard IN user32 INTEGER hwnd
DECLARE INTEGER CloseClipboard IN user32
DECLARE INTEGER GetClipboardData IN user32 INTEGER uFormat
DECLARE INTEGER IsClipboardFormatAvailable IN user32 INTEGER wFormat

DECLARE INTEGER WideCharToMultiByte IN kernel32;
INTEGER CodePage, INTEGER dwFlags, STRING lpWideCharStr,;
INTEGER cchWideChar, STRING @lpMultiByteStr, INTEGER cbMultiByte,;
STRING lpDefaultChar, INTEGER lpUsedDefaultChar

_________________
大家好,請多指教
回頂端
檢視會員個人資料 發送私人訊息
ckp6250



註冊時間: 2004-07-30
文章: 1645


第 4 樓

發表發表於: 星期二 四月 16, 2013 9:06 am    文章主題: 引言回覆

個人認為,以實例來測試才會有效率
若可以,您不妨貼上您的表單、相關程式碼及該網址,
若許大家可以幫忙喬一下。
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
nelsonchuang



註冊時間: 2003-09-04
文章: 563
來自: 臺灣

第 5 樓

發表發表於: 星期二 四月 16, 2013 9:43 am    文章主題: 引言回覆

呵呵,表單這個不方便啦,不過說回來,我有個地方說錯了:「是會連rtf的格式都會拿掉」這句不對.
因為轉換過後,確實是繁體中文.

然而,該顯示的地方仍然出現??的樣子,與word貼過來的不一樣.
我之所以會誤以為「是會連rtf的格式都會拿掉」
是因為從word貼過來的rtf格式,會出現/u550/u550(類似的字碼)
而直接從程式轉換後,是真的big 5的格式...rtf格式只會出現??的字樣..所以弄了個大烏龍

說真的....我仍弄不清楚word是怎麼理的...

如果你有興趣,可以用這個網頁的資料試試~
http://www.zdic.net/zd/zi3/ZdicF0ZdicA0Zdic84ZdicA3.htm

_________________
大家好,請多指教
回頂端
檢視會員個人資料 發送私人訊息
syntech



註冊時間: 2003-05-16
文章: 4249
來自: Taipei,Taiwan

第 6 樓

發表發表於: 星期二 四月 16, 2013 4:53 pm    文章主題: 引言回覆

在 WINDOWS NT 系列中,
內部使用 UNICODE (UTF-16/UCS-2,M$稱為 wide string),
但是會自動轉成 DBSC 字串,給傳統不支援UNICODE的程式使用,
所以吃DBSC 字串的 FOXPRO 就沒問題.

但是直接用FOXPRO 抓字串,沒經過自動轉換這個過程,
就會變成??

從FOXPRO等 DBSC程式貼到WORD 去,也會偷偷轉換成 UNICODE (wide string).

大致過程就是這樣.

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
nelsonchuang



註冊時間: 2003-09-04
文章: 563
來自: 臺灣

第 7 樓

發表發表於: 星期四 四月 18, 2013 1:45 pm    文章主題: 引言回覆

山不轉,路轉,路不轉人轉
我在程式中開啟WORD的方式,先把網頁複製的資料貼上WORD
然後再複製一次....
再把上面的程式改一下,直接轉成RTF格式丟到RICHTEXT,搞定...
謝謝兩位回覆...

_________________
大家好,請多指教
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作