當複製vs2010中帶有中文字元的**到office(word, excel, powerpoint, outlook)時,
在中文字元後面會被新增一到三個亂碼。比如複製"中文字元",貼上到word就會變成(中d文?字á?符¤?)。
通過黑暗執行緒的一篇文章提示,擷取剪貼簿中rtf(富文字格式)的資料流,並作出修復。該作者使用了 .net中的正規表示式類regex來達到修復目的。方法呼叫很簡單,感興趣的可以搜尋一下作者的部落格空間。
我這裡給出另乙個解決方法:同時擷取cf_unicodetext和rtf兩種剪貼簿資料,以cf_unicodetext中的正確資料為參照,對比剔除rtf中的亂碼。
寫這份**走了不少彎路,主要是一開始對rtf格式不熟悉,其中的中文接ascii碼處理著實讓我差點抓破了頭皮。
先給出亂碼修復截圖:
程式新增了全域性熱鍵 ctrl+q 和 監測狀態。右下角則是乙個動態文字logo,滑鼠移上去就會出現logo,
下面貼出程式的核心演算法:
函式引數說明:
ptstr ptext (rtf資料首位址指標,切勿傳遞剪貼簿記憶體,必須是程式拷貝剪貼簿的。)
uint itext (rtf資料大小。單位位元組)
lpwstr ptextu (cf_unicodetext資料首位址指標,同上,不可為剪貼簿記憶體。)
uint itextu (cf_unicodetext資料大小。單位字元)
返回值型別 uint (修復完後rtf資料的大小。單位位元組)
/*-------------------------------
repair.cpp - 實作亂碼修正處理
-------------------------------*/
#include
#include
uint
clobalrepair (
ptstr
ptext
,uint
itext
,lpwstr
ptextu
,uint
itextu) }
// 中文接中文的處理
if (
ptextuw[0
]>
0x80)
// 文件尾的處理
if( ptextuw[0
]==null)
// 換行符、回車及水平製表
if (
ptextuw[0
]==0x0d ||
ptextuw[0
]==0x09)
// 中文接ascii的處理
if (
ptextuw[0
]<=
0x80
&&ptextuw[0
]>=
0x20)
else
}if (
strlen(
ansit)
<=3)
ansit[ir
]='//';
ptextw
=ptexts;
ptextw
=strstr(
ptexts
,ansit);
if(ptextw
==null) }
while(
true)
else}}
}ptextw=&
ptextw[-
1];}if (
ansit[2
]!=null
&&bansi
!=true)
else}}
}ptextw=&
ptextw[-
1];}}
if (
ansit[3
]!=null
&&bansi
!=true)
else}}
}ptextw=&
ptextw[-
1];}}
if (
ansit[4
]!=null
&&bansi
!=true)
else}}
}ptextw=&
ptextw[-
1];}}
if (
ansit[5
]!=null
&&bansi
!=true)
else}}
}ptextw=&
ptextw[-
1];}}
if (
ansit[6
]!=null
&&bansi
!=true)
else}}
}ptextw=&
ptextw[-
1];}}
if (
ansit[7
]!=null
&&bansi
!=true)
else}}
}ptextw=&
ptextw[-
1];}}
}ic=ptextw
-ptexts; i
=ptexts
-ptext; ir
=i+ic;
for ( i=
0; ir
<=
itext;
i++,ir
++)
ptexts[i
]=ptextw[i
];itext
-=ic;
continue; }
}return
itext; }
解決vs2010到word複製產生的中文亂碼
上篇文章提到,我成功的用word解決了 高亮與對齊的問題,現在新的問題出現了,如果程式中有中文,那麼,從vs2010到word複製過程中,會產生亂碼,如下所示 include stdio.h intmain 這又怎麼辦呢?我上網搜尋了一下,果然有高手解決了此問題,據說,這個問題是vs2010在每個中...
VS2010專案複製
好久沒寫日記了,忙的沒時間記錄,只埋頭編碼,不停下來思考和總結是不好滴啊!在做的乙個專案終於決定要分化出不同版本了,伺服器和客戶端。用乙個巨集來控制倆版本實在是不舒服,而且隱約覺得版本的區別將越來越大,如果繼續用巨集來控制,豈不是要把自己搞暈。從原有的專案 2 in 1,這是乙個使用巨集server...
C 程式在VS2010中複製窗體
1 乙個窗體有三個檔案,全部拷貝到新的專案檔案目錄中 2 在新專案中新增現有項,然後把這個窗體相關的三個檔案都新增到新的專案中 4 開啟窗體 修改public partial class old form 中的old為新窗體類名new.重要 窗體初始化模組中的old也相應的修改為new public...