在Web的環境下,一個網站會同時被兩岸的使用者使用已經不是什麼了不起的大事,前陣子有遇到有人是透過override Render這個function來達到整個頁面文字的簡繁互換,但那個作法最後評估後覺得太耗費效能,加上我們的產品本身就已經有作UI的多國語言,因此也不需要做到那麼複雜,但有一天使用者提了一個需求,希望輸入簡體字可以查到繁體的資料...
在Web的環境下,一個網站會同時被兩岸的使用者使用已經不是什麼了不起的大事,前陣子有遇到有人是透過override Render這個function來達到整個頁面文字的簡繁互換,但那個作法最後評估後覺得太耗費效能,加上我們的產品本身就已經有作UI的多國語言,因此也不需要做到那麼複雜,但有一天使用者提了一個需求,希望輸入簡體字可以查到繁體的資料,聽起來挺合理的,隔沒兩天,我們也真的把他給完成了,哈哈,在網路上雖然查到幾種解決方案,但最後我們決定採用OS本身提供的dll元件來進行簡繁互換,改class的source如下:
01
/// <summary>
02
/// 做為字碼轉換工具
03
/// </summary>
04
public class CharSetConverter
05
{
06
internal const int LOCALE_SYSTEM_DEFAULT = 0x0800;
07
internal const int LCMAP_SIMPLIFIED_CHINESE = 0x02000000;
08
internal const int LCMAP_TRADITIONAL_CHINESE = 0x04000000;
09
10
/// <summary>
11
/// 使用OS的kernel.dll做為簡繁轉換工具,只要有裝OS就可以使用,不用額外引用dll,但只能做逐字轉換,無法進行詞意的轉換
12
/// <para>所以無法將電腦轉成計算機</para>
13
/// </summary>
14
[DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)]
15
internal static extern int LCMapString(int Locale, int dwMapFlags, string lpSrcStr, int cchSrc, [Out] string lpDestStr, int cchDest);
16
17
/// <summary>
18
/// 繁體轉簡體
19
/// </summary>
20
/// <param name="pSource">要轉換的繁體字:體</param>
21
/// <returns>轉換後的簡體字:体</returns>
22
public static string ToSimplified(string pSource)
23
{
24
String tTarget = new String(' ', pSource.Length);
25
int tReturn = LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_SIMPLIFIED_CHINESE, pSource, pSource.Length, tTarget, pSource.Length);
26
return tTarget;
27
}
28
29
/// <summary>
30
/// 簡體轉繁體
31
/// </summary>
32
/// <param name="pSource">要轉換的繁體字:体</param>
33
/// <returns>轉換後的簡體字:體</returns>
34
public static string ToTraditional(string pSource)
35
{
36
String tTarget = new String(' ', pSource.Length);
37
int tReturn = LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_TRADITIONAL_CHINESE, pSource, pSource.Length, tTarget, pSource.Length);
38
return tTarget;
39
}
40
}
/// <summary> 02
/// 做為字碼轉換工具 03
/// </summary> 04
public class CharSetConverter 05
{ 06
internal const int LOCALE_SYSTEM_DEFAULT = 0x0800; 07
internal const int LCMAP_SIMPLIFIED_CHINESE = 0x02000000; 08
internal const int LCMAP_TRADITIONAL_CHINESE = 0x04000000; 09
10
/// <summary> 11
/// 使用OS的kernel.dll做為簡繁轉換工具,只要有裝OS就可以使用,不用額外引用dll,但只能做逐字轉換,無法進行詞意的轉換 12
/// <para>所以無法將電腦轉成計算機</para> 13
/// </summary> 14
[DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)] 15
internal static extern int LCMapString(int Locale, int dwMapFlags, string lpSrcStr, int cchSrc, [Out] string lpDestStr, int cchDest); 16
17
/// <summary> 18
/// 繁體轉簡體 19
/// </summary> 20
/// <param name="pSource">要轉換的繁體字:體</param> 21
/// <returns>轉換後的簡體字:体</returns> 22
public static string ToSimplified(string pSource) 23
{ 24
String tTarget = new String(' ', pSource.Length); 25
int tReturn = LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_SIMPLIFIED_CHINESE, pSource, pSource.Length, tTarget, pSource.Length); 26
return tTarget; 27
} 28
29
/// <summary> 30
/// 簡體轉繁體 31
/// </summary> 32
/// <param name="pSource">要轉換的繁體字:体</param> 33
/// <returns>轉換後的簡體字:體</returns> 34
public static string ToTraditional(string pSource) 35
{ 36
String tTarget = new String(' ', pSource.Length); 37
int tReturn = LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_TRADITIONAL_CHINESE, pSource, pSource.Length, tTarget, pSource.Length); 38
return tTarget; 39
} 40
}其他找到的兩個方法可以參考這邊,這個部落格的格主也是我:http://www.wretch.cc/blog/JimmyYu/14938662
![]() |
游舒帆 (gipi) 探索原力Co-founder,曾任TutorABC協理與鼎新電腦總監,並曾獲選兩屆微軟最有價值專家 ( MVP ),離開職場後創辦探索原力,致力於協助青少年培養面對未來的能力。認為教育與組織育才其實息息相關,都是在為未來儲備能量,2018年起成立為期一年的專題課程《職涯躍升的關鍵24堂課》,為培養台灣未來的領袖而努力。 |

