純T-SQL腳本可以實現簡繁體轉換嗎?歡迎指教。

N_chow 2003-05-15 02:12:27
看了chiff的帖子,覺得有點思路,但又覺得無從下手。(http://expert.csdn.net/Expert/topic/1297/1297154.xml?temp=.5905268)
用Unicode好像不能解決問題。

between 19968 and 40870 之間包含了簡體及繁體的字的所有Unicode碼,但是毫無規則(或許是我還沒找到)。


...全文
306 34 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
j9988 2003-06-26
  • 打赏
  • 举报
回复
我都发给你好多天了,你今天才看,叹"精华"!
OpenVMS 2003-06-26
  • 打赏
  • 举报
回复
精华
zyb_8022 2003-06-09
  • 打赏
  • 举报
回复
xuexi
DJMPH 2003-06-09
  • 打赏
  • 举报
回复
好极~
hjb111 2003-06-09
  • 打赏
  • 举报
回复
学习学习再学习!~
zeng_zhh 2003-06-08
  • 打赏
  • 举报
回复
UP一下,保存.謝謝哦.
N_chow 2003-05-17
  • 打赏
  • 举报
回复
/*


Description:
---需要安裝Office 2000

統杅佽隴:
-------------------------------------------------------
@TransType 轉換類型
0 -- 簡體轉繁體
1 -- 繁體轉簡體
@sInText 待轉換的字串
@sOutText 轉換後的字串
-------------------------------------------------------
*/


ALTER Proc spConverter @TransType tinyint,@sInText Nvarchar(4000),@sOutText Nvarchar(4000)OUTPUT
AS

DECLARE @WordApplication int
DECLARE @ErrHandler int
DECLARE @Document int
DECLARE @Selection int
DECLARE @Message NVARCHAR(4000)
DECLARE @src varchar(255), @desc varchar(255)
--Create Word instance
EXEC @ErrHandler = sp_OACreate 'Word.Application', @WordApplication OUT
IF @ErrHandler != 0
BEGIN
EXEC sp_OAGetErrorInfo @WordApplication, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@ErrHandler), Source=@src, Description=@desc
RETURN
END
---// create instance end
--Create a word document instance
EXEC @ErrHandler = sp_OACreate 'Word.Document', @Document OUT
IF @ErrHandler != 0
BEGIN
EXEC sp_OAGetErrorInfo @Document, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@ErrHandler), Source=@src, Description=@desc
RETURN
END
--//
---
EXEC @ErrHandler = sp_OAGetProperty @Document, 'Application.Selection', @Selection OUT
IF @ErrHandler != 0
BEGIN
EXEC sp_OAGetErrorInfo @Document
RETURN
END

EXEC @ErrHandler = sp_OASetProperty @Selection, 'Text', @sInText
IF @ErrHandler != 0
BEGIN
EXEC sp_OAGetErrorInfo @Selection
RETURN
END

EXEC @ErrHandler = sp_OAMethod @Selection, 'Range.TCSCConverter',NULL,@TransType,1,1
IF @ErrHandler != 0
BEGIN
EXEC sp_OAGetErrorInfo @Selection
RETURN
END

EXEC @ErrHandler = sp_OAGetProperty @Selection, 'Text', @sOutText OUT
IF @ErrHandler != 0
BEGIN
EXEC sp_OAGetErrorInfo @Selection
RETURN
END
---
EXEC @ErrHandler = sp_OADestroy @WordApplication
IF @Errhandler != 0
BEGIN
EXEC sp_OAGetErrorInfo @WordApplication
RETURN
END
---
EXEC @ErrHandler = sp_OADestroy @Document
IF @Errhandler != 0
BEGIN
EXEC sp_OAGetErrorInfo @Document
RETURN
END
EXEC sp_OAStop
RETURN
j9988 2003-05-16
  • 打赏
  • 举报
回复
网上有简繁GBK BIG5对照文本,可以搜索下载一个。倒入SQLSERVER中。
j9988 2003-05-16
  • 打赏
  • 举报
回复
简繁转换,你如果不是转成BIG5,单在GBK内转,在SQLSERVER内对照表也好做些。可是他们汉字不一一对应。简多繁少。UNICODE汉字分区后面没一点规律。

不理彩简繁之间词汇不一致问题。建对照表:
GBK简--GBK繁--BIG5简--BIG5繁
这样好转些。



gyzrich 2003-05-16
  • 打赏
  • 举报
回复
正确显示数据库里同时存在的GB码和BIG5码:

Public Function CheckBIG(strSource As String) As Boolean
Dim idx As Long
Dim ByteTemp() As Byte
CheckBIG = False
For idx = 1 To Len(strSource)
ByteTemp = StrConv(Mid(strSource, idx, 1), vbFromUnicode)
If UBound(ByteTemp) > 0 Then
If (ByteTemp(1) >= 64) And (ByteTemp(1) <= 126) Then
CheckBIG = True
Exit For
End If
End If
Next idx
End Function

j9988 2003-05-16
  • 打赏
  • 举报
回复
有理有理,借用人家现成的。

不过有人家现成的C代码,写成XP然后调用。应付SQLSERVER内简单转换应是不错的。
也可以参考算法:
http://www.5xsoft.com/data/200108/3108144301_1.htm

我相信没有100%准确的转换软件,只有在准确率和速度上做出取舍。
icevi 2003-05-16
  • 打赏
  • 举报
回复
天哪,我刚回复,你就已经是想到跟我一样的想法了:)
icevi 2003-05-16
  • 打赏
  • 举报
回复
我觉得有一个办法可以考虑,word 2000及以上版本中本来就有简繁体字转换的工具,而且可以达到J9988说的那种效果。
所以我觉得可以用OLE Automation,将要转换的文本内容复制到一个空白WORD文档中,调用转换的语句:
简转繁:
WordBasic.ToolsSCTCTranslate Direction:=0, Varients:=0, TranslateCommon:=0

繁转简:
WordBasic.ToolsTCSCTranslate Direction:=0, Varients:=0, TranslateCommon:=0

再将转换后的文本COPY出来就可以了。

这样肯定是可以达到要求的,就是速度可能会稍有些慢。可以在程序中最开始就定义一WORD APPLICATION的实例对象,不必每转一次就申明一次,这样可能会快些。

有些情况可能会觉得这样比较麻烦,所以你自己考虑吧。

我是觉得自己写简繁转换,未必效率会高到哪里去,不如用现成的。
N_chow 2003-05-16
  • 打赏
  • 举报
回复
暈了暈了,,,,,,看來此路不通。
我打算用sp_OACreate去Call Word里面的繁轉簡功能了。
腳本寫出來後我會放出來給上面關注這個問題的朋友一起分享。
謝謝各位。



N_chow 2003-05-16
  • 打赏
  • 举报
回复
按鈕JJ,奇怪哦,我昨天還打得開的。
暈了,搜索都搜不到了。
N_chow 2003-05-16
  • 打赏
  • 举报
回复
我再踢!
老J,給個點子吧。
j9988 2003-05-16
  • 打赏
  • 举报
回复
我想了想,还有一个对照表也少不了,那就常用词汇对照表,简单转换后必需通过修正,
比如,我举个简单例子:简体字“后”
简体 繁体
后汉书--後漢書 不能是:后漢書
皇后----皇后 而不能是:皇後

这种非一一对应的例子不计其数!所以简繁转换是个难题。不然就不用那么多专业软件了。
转换得好速度必然慢。转换得快效果未必会好。
要想做好简繁转换,速度上要下一翻功夫。

更不说后来新词汇,如:“字节”--“位元组” 等等了。
以上仅供参考。
CrazyFor 2003-05-16
  • 打赏
  • 举报
回复
上面方法不行,排列不同.
CrazyFor 2003-05-16
  • 打赏
  • 举报
回复
http://it.beelink.com.cn/20020802/1173882.shtml

下载了
繁简两用五笔输入法 V5.0

解压后,用输入法生成器逆转换Vcd2000.mb和Dcd2000.md,

得到两个文本文件,如:
Vcd2000.mb
[Text]
工a
式aa
工aaaa a
恭恭敬敬aaaa
工期aaad
某某某aaaf
葡萄牙aaah
....

Dcd2000.md
[Text]
工a
式aa
工aaaa a
恭恭敬敬aaaa
工期aaad
某某某aaaf
葡萄牙aaah
花花世界aaal
工藝aaan
工區aaaq
工匠aaar
....
看以上文件,顺序完全一样,所以可以达到对照目的.

将这两个文档导入数据中处理,即可得到繁简对照表,
wgy2008 2003-05-16
  • 打赏
  • 举报
回复
学习!学习!
加载更多回复(14)

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧