首页
/
每日頭條
/
科技
/
簡繁轉換易錯字梳理
簡繁轉換易錯字梳理
更新时间:2025-05-11 10:26:38

簡繁轉換易錯字梳理(利用API來實現中文簡繁轉換)1

Word裡有一個簡繁轉換功能,很靓仔,一秒鐘全文轉換完畢

Excel中也有這個功能,不過是外置COM加載項的形式,用起來就沒有Word裡那麼靓仔了

這個功能呢,說到底其實就一個API

聲明如下:

Private Declare Function LCMapStringA Lib "kernel32" ( _ ByVal Locale As Long, _ ByVal dwMapFlags As Long, _ ByVal lpSrcStr As String, _ ByVal cchSrc As Long, _ ByVal lpDestStr As String, _ ByVal cchDest As Long) As Long

參數很簡單:

第1個:Locale,代表語言環境,有簡繁轉換需求的場景,基本上不需要管這個參數

第2個:dwMapFlags,這個是轉換目标的标識符,我們這裡隻需要關注兩個

Const LCMAP_SIMPLIFIED_CHINESE = &H2000000 '繁體轉簡體

Const LCMAP_TRADITIONAL_CHINESE = &H4000000 '簡體轉繁體

第3個:源字符串指針

第4個:源字符串長度

第5個:目标字串指針

第6個:目标字串長度

說來說去,就第2個參數有用

但是呢,在調用的時候要注意,VB6的字符串的典型問題。

先看代碼

Private Declare Function LCMapStringA Lib "kernel32" ( _ ByVal Locale As Long, _ ByVal dwMapFlags As Long, _ lpSrcStr As Any, _ ByVal cchSrc As Long, _ lpDestStr As Any, _ ByVal cchDest As Long) As Long Private Declare Function lstrlenA Lib "kernel32" (ByVal lpString As String) As Long Private Const LCMAP_SIMPLIFIED_CHINESE = &H2000000 '繁體轉簡體 Private Const LCMAP_TRADITIONAL_CHINESE = &H4000000 '簡體轉繁體 Function ConvertChinese(ByVal srcString As String, ByVal bSimplified As Boolean) As String Dim lngLength As Long Dim strBuffer As String lngLength = lstrlenA(srcString) '不使用lenB If lngLength = 0 Then GoTo lExit '不使用Exit Function strBuffer = Space(lngLength - 1) If bSimplified Then LCMapStringA 0&, LCMAP_SIMPLIFIED_CHINESE, ByVal srcString, lngLength, ByVal strBuffer, lngLength '轉簡體 Else LCMapStringA 0&, LCMAP_TRADITIONAL_CHINESE, ByVal srcString, lngLength, ByVal strBuffer, lngLength '轉繁體 End If ConvertChinese = strBuffer lExit: End Function

調用也很簡單:

Debug.Print ConvertChinese("中華人民共和國LoveLive", False)

輸出結果:在我的垃圾筆記本上時間消耗大概是0.01毫秒

中華人民共和國LoveLive

這裡做兩處解釋:

一、這裡我用了lstrlenA這個API來計算長度,為啥不用len或者lenB呢,具體原因,你自己可以改了試試,這是VB媽媽的特征決定的,隻有這樣才行,要不然結果裡就會有多餘的字符串

有的人說,沒關系,有多餘的,我最後處理完,先處理一下再返回

還是那句話,您說得都對,您開心就好,我臉上笑嘻嘻,心裡MMP

二、我的API改了聲明,byval lpSrcStr As String改成了ByRef lpSrcStr As Any

這是為了提高效率,你說傳字符串和傳其指針到底哪一個效率高呢?

雖然由于VB媽媽的原因,這裡也并沒有傳遞字符串本身的指針,而是傳遞了字符串緩沖區的指針

但是這樣也能快不一些

當然,也有些人說用W版的函數還能更快,好的,我也寫了W版的

Private Declare Function LCMapStringW Lib "kernel32" ( _ ByVal Locale As Long, _ ByVal dwMapFlags As Long, _ lpSrcStr As Any, _ ByVal cchSrc As Long, _ lpDestStr As Any, _ ByVal cchDest As Long) As Long Private Const LCMAP_SIMPLIFIED_CHINESE = &H2000000 '繁體轉簡體 Private Const LCMAP_TRADITIONAL_CHINESE = &H4000000 '簡體轉繁體 Function ConvertChinese(ByVal srcString As String, ByVal bSimplified As Boolean) As String Dim lngLength As Long Dim strBuffer As String lngLength = Len(srcString) '不使用lenB If lngLength = 0 Then GoTo lExit '不使用Exit Function strBuffer = Space(lngLength) If bSimplified Then LCMapStringW 0&, LCMAP_SIMPLIFIED_CHINESE, ByVal StrPtr(srcString), lngLength, ByVal StrPtr(strBuffer), lngLength '轉簡體 Else LCMapStringW 0&, LCMAP_TRADITIONAL_CHINESE, ByVal StrPtr(srcString), lngLength, ByVal StrPtr(strBuffer), lngLength '轉繁體 End If ConvertChinese = strBuffer lExit: End Function

調用同上,時間消耗大概是上面的一半左右

也是兩個地方簡單解釋:

一、這裡少了一個API,為什麼呢,因為W版的函數,就不需要VB媽媽代管AU<->UA轉換了,所以算字符個數就可以了

二、因為現在是W版函數了,需要用StrPtr直接獲取字符串的數據地址,為啥呢,因為沒有AU轉換了

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
wifi靜态和dhcp有什麼區别
wifi靜态和dhcp有什麼區别
以華為MateBookX,Win10為例,DHCP即動态ip,可以自動獲取IP地址。靜态ip上網又被稱為固定IP地址上網,需要手動設置IP地址。在網速上,動态ip和靜态ip沒有區别。動态ip不是一個真實的IP地址,靜态IP是可以直接上網的IP地址。Wi-Fi,又稱作行動熱點,是Wi-Fi聯盟制造商的商标做為産品的品牌認證,是一個創建于IEEE802.11标準的無線局域網技術。基于兩套系統的密切相關
2025-05-11
小屏全屏手機有幾款
小屏全屏手機有幾款
1、小米8SE。采用了雙面玻璃加金屬中框的造型,手機配備了一塊5.88英寸的AMOLED劉海屏,分辨率為2244×1080,由于采用了全面屏機身,官方稱約等于5.2英寸傳統手機的尺寸大小。手機背面配備了豎排雙攝鏡頭以及補光燈,還有一枚圓形指紋識别按鍵。小米8SE整機觀感以及握持感都還不錯。2、諾基亞X6。采用了雙面玻璃加金屬中框的設計,手機配備了5.8英寸比例為19:9的劉海屏,分辨率為2280x
2025-05-11
如何将word某一頁删除
如何将word某一頁删除
以華為MateBookX、win10、word2020為例。首先打開word文檔;選擇需要删除頁的所有内容;按鍵盤上的退格鍵删除即可;如果遇到有空白頁不能删除的情況;将光标定位在空白頁的開頭;按鍵盤上的退格鍵删除即可。
2025-05-11
冬青樹上可以嫁接什麼花卉
冬青樹上可以嫁接什麼花卉
1、冬青樹能嫁接:紫葉李、紅葉李、紅葉碧桃、五角楓、栾樹、黃栌、黑松等。2、嫁接方法如下:嫁接的時間一般是在春季樹液開始流動尚未發芽時,其方法較多,其中劈接法是生産上應用較多的一種方法。3、具體步驟:嫁接時先将砧木從基部5到10厘米的光滑處剪截,斷面要平滑,然後在斷面中心垂直劈開,深3到4厘米。4、接穗選擇具有2到3個飽滿芽的枝段,在下部芽左右兩側各削一長3到4厘米的楔形雙斜面,使有芽的一側稍厚,
2025-05-11
因地卡多肉植物怎麼養
因地卡多肉植物怎麼養
1、适宜環境。因地卡喜歡的環境當然要溫暖、涼爽、幹燥,陽光充足是必須的,在養護過程中,需要給足光照,特别生長季節,需要将因地卡放在光照的地方養即可。2、光照要求。地卡喜歡充足的光線,除了夏季的悶熱時段,适當遮陰,其他時間都要充分見光,會讓它的葉片更加好看。一直養在屋裡不見光,因地卡就會徒長。3、澆水...
2025-05-11
Copyright 2023-2025 - www.tftnews.com All Rights Reserved