1 创建简繁体对照表
脚本如下:
CREATE TABLE [dbo].[SYS_BGBIG](
[ID] [int] IDENTITY(1,1) NOT NULL,
[gb] [nvarchar](1) NULL,
[big] [nvarchar](1) NULL,
CONSTRAINT [PK_SYS_BGBIG] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
可以从这里下载常用简繁体对照表1500多个简繁体对照(仅有繁体字的汉字,简繁体字一样的不需要对照)
https://download.csdn.net/download/postfxj/10563082
2 也可以自行收集简繁体字对照,方法如下(c#方法):
2.1 创建简繁转换的类,不需要使用第三方dll,直接使用windows的API
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace POS
{
class ConvertSCTC
{
#region 简体繁体转换
//public enum ConvertType
//{
// Simplified,
// Traditional
//}
[DllImport("kernel32.dll", EntryPoint = "LCMapStringA")]
public static extern int LCMapString(int Locale, int dwMapFlags, byte[] lpSrcStr, int cchSrc, byte[] lpDestStr, int cchDest);
public const int LCMAP_SIMPLIFIED_CHINESE = 0x02000000;
public const int LCMAP_TRADITIONAL_CHINESE = 0x04000000;
public static Encoding gb2312 = Encoding.GetEncoding(936);
public static string SCTOTCConvert(string TextValue)
{
if (TextValue != "")
{
String ReturnTextValue = "";
byte[] source = gb2312.GetBytes(TextValue);
byte[] dest = new byte[source.Length];
LCMapString(0x0804, LCMAP_TRADITIONAL_CHINESE, source, -1, dest, source.Length);
ReturnTextValue = gb2312.GetString(dest);
return ReturnTextValue;
}
else return "";
}
public static string TCTOSCConvert( string TextValue)
{
if (TextValue != "")
{
String ReturnTextValue = "";
byte[] source = gb2312.GetBytes(TextValue);
byte[] dest = new byte[source.Length];
LCMapString(0x0804, LCMAP_SIMPLIFIED_CHINESE, source, -1, dest, source.Length);
ReturnTextValue = gb2312.GetString(dest);
return ReturnTextValue;
}
else
return "";
}
public static void TCTOSCConvert( Control c)
{
c.Text = TCTOSCConvert(c.Text );
if (c is TextBox )
((TextBox)c).SelectionStart = ((TextBox)c).Text.Length;
}
public static void SCTOTCConvert(Control c)
{
c.Text = SCTOTCConvert(c.Text);
if (c is TextBox)
((TextBox)c).SelectionStart = ((TextBox)c).Text.Length;
}
#endregion
}
}
2.1 收集简繁字库方法如下,以任意表任意字段为例来进行收集。
private void btnSJ_Click(object sender, EventArgs e)
{
waiting w=new waiting ();
try
{
w.Show ();
if(dgvData .Rows .Count >0)
for (int i = 0; i < dgvData.Rows.Count; i++)
{
string s = dgvData.Rows[i].Cells[txtField.Text].Value.ToString();
for(int j=0;j<s.Length ;j++)
{
string sFT = s.Substring(j, 1);
string sJT = ConvertSCTC.TCTOSCConvert(sFT);
if (sFT != sJT)
{
string sql = "Select * FROM SYS_BGBIG WHERE BIG=N'" + sFT + "'";
bool isData = WEBPOS.IsExit(BASEINFO.DESEncrypt(sql));
if (!WEBPOS.IsExit(BASEINFO.DESEncrypt(sql)))
{
sql = "insert into SYS_BGBIG(GB,BIG) VALUES(N'" + sJT + "',N'" + sFT + "')";
WEBPOS.SQLcmd(BASEINFO.DESEncrypt(sql));
}
}
}
}
}
finally
{
w.Close ();
}
}
3 在SQL Server中实现简体和繁体的转换
创建标量值函数,实现简到繁和繁到简的任意翻译。
create FUNCTION [dbo].[f_GB2BIG](
@str nvarchar(4000), --要转换的字符串
@toBIG bit --转换标志,为,表示GB-->BIG,否则是BIG-->GB
)RETURNS nvarchar(4000)
AS
BEGIN
IF @toBIG=1
SELECT @str=REPLACE(@str,gb,big)
FROM SYS_BGBIG
WHERE CHARINDEX(gb,@str)>0
ELSE
SELECT @str=replace(@str,big,gb)
FROM SYS_BGBIG
WHERE charindex(big,@str)>0
RETURN(@str)
END
使用示例 :Select dbo.f_GB2BIG(N'国华发展',1)