• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

純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碼,但是毫無規則(或許是我還沒找到)。


...全文
182 点赞 收藏 34
写回复
34 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
学习!学习!
回复
加载更多回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2003-05-15 02:12
社区公告
暂无公告