史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 作業系統操作技術文件
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2006-01-16, 10:22 PM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 將中文轉換為拼音的算法分析和VBS程式碼

整理一下,希望對大家有用

第一種,取得拼音首字母
如: 把 轉換成 JPML

算法很簡單,漢字在ANSI編碼中是以拼音順序排列的,因此可以利用ASC函數得到漢字的ANSI字元程式碼,根據ANSI程式碼即可得到漢字的拼音。參見附件裡的 漢字讀音表GB2312版.txt,共7809個漢字

VBS來源碼如下:
取得拼音首字母.vbs
function getpychar(char)
tmp=65536+asc(char)
if(tmp>=45217 and tmp<=45252) then
getpychar= "A"
elseif(tmp>=45253 and tmp<=45760) then
getpychar= "B"
elseif(tmp>=45761 and tmp<=46317) then
getpychar= "C"
elseif(tmp>=46318 and tmp<=46825) then
getpychar= "D"
elseif(tmp>=46826 and tmp<=47009) then
getpychar= "E"
elseif(tmp>=47010 and tmp<=47296) then
getpychar= "F"
elseif(tmp>=47297 and tmp<=47613) then
getpychar= "G"
elseif(tmp>=47614 and tmp<=48118) then
getpychar= "H"
elseif(tmp>=48119 and tmp<=49061) then
getpychar= "J"
elseif(tmp>=49062 and tmp<=49323) then
getpychar= "K"
elseif(tmp>=49324 and tmp<=49895) then
getpychar= "L"
elseif(tmp>=49896 and tmp<=50370) then
getpychar= "M"
elseif(tmp>=50371 and tmp<=50613) then
getpychar= "N"
elseif(tmp>=50614 and tmp<=50621) then
getpychar= "O"
elseif(tmp>=50622 and tmp<=50905) then
getpychar= "P"
elseif(tmp>=50906 and tmp<=51386) then
getpychar= "Q"
elseif(tmp>=51387 and tmp<=51445) then
getpychar= "R"
elseif(tmp>=51446 and tmp<=52217) then
getpychar= "S"
elseif(tmp>=52218 and tmp<=52697) then
getpychar= "T"
elseif(tmp>=52698 and tmp<=52979) then
getpychar= "W"
elseif(tmp>=52980 and tmp<=53640) then
getpychar= "X"
elseif(tmp>=53689 and tmp<=54480) then
getpychar= "Y"
elseif(tmp>=54481 and tmp<=62289) then
getpychar= "Z"
else '如果不是中文,則不處理
getpychar=char
end if
end function

function getpy(str)
for i=1 to len(str)
getpy=getpy&getpychar(mid(str,i,1))
next
end function

'----------------------- 測試 -----------------------
temp = InputBox("請輸入字元串:", "InputBox", "我是測試字元串,哈哈。…… English char is ok too.")
If Len(temp) > 0 Then
msgbox getpy(CStr(temp)), ,"Result"
End If
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
舊 2006-01-16, 10:24 PM   #2 (permalink)
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

第二種,將漢字轉換為拼音
如: 將 我愛精品夢露 轉換為 woaijingpinmenglu

算法和上面的一樣,只是區分得更細了

中文轉換為拼音.vbs



'============== 下面是字符串转换为拼音的函数 ===================
'------ 汉字ASCII码拼音对照表,google来的,感谢无名氏-----
Set d = CreateObject("Scripting.Dictionary")
d.add "a",-20319
d.add "ai",-20317
d.add "an",-20304
d.add "ang",-20295
d.add "ao",-20292
d.add "ba",-20283
d.add "bai",-20265
d.add "ban",-20257
d.add "bang",-20242
d.add "bao",-20230
d.add "bei",-20051
d.add "ben",-20036
d.add "beng",-20032
d.add "bi",-20026
d.add "bian",-20002
d.add "biao",-19990
d.add "bie",-19986
d.add "bin",-19982
d.add "bing",-19976
.....
'最后一个字符是“座”,ASC值为-10247

'--------------------- 将单个字符转换为拼音 --------------------------
Function Chr2PY(num)
If num < -20319 Or num > -10247 Then
Chr2PY = Chr(num)
Else
a = d.Items
b = d.keys
For i = d.count - 1 To 0 Step -1
If a(i) <= num Then Exit For
Next
Chr2PY = b(i)
End If
End Function

'---------------------- 将中文标点符号转换为英文标点符号 --------------------------
Function SymbolC(str)
str = Replace(str, "!", "!")
str = Replace(str, "(", "(")
str = Replace(str, ")", ")")
str = Replace(str, "-", "-")
str = Replace(str, "——", "--")
....
SymbolC = str
End Function

'---------------------- 将字符串转换成拼音 --------------------------
Function Str2PY(str)
Str2PY = ""
For i = 1 To len(str)
Str2PY = Str2PY & Chr2PY(Asc(Mid(str, i, 1)))
Next
End Function

'----------------------- 测试 -----------------------
temp = InputBox("请输入需要转换成拼音的字符串:", "InputBox", "我是测试字符串,呵呵。…… English char is ok too.")
If Len(temp) > 0 Then
msgbox SymbolC(Str2PY(CStr(temp))), ,"Result"
End If
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
舊 2006-01-16, 10:26 PM   #3 (permalink)
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

第三種,將漢字轉換為帶聲調的拼音
如: 將 我愛精品夢露 轉換為 jīngpǐnm&egrave;ngl&ugrave;

原理很簡單,先造表(佩服這個牛人),然後搜尋取代即可

帶聲調的轉換.vbs



a1 = "的de5,一yi1,國guo2,在z....
.....
a68 = "煺tui4,柝tuo4,膃wa4,...

b1 = "的d&iacute;/d&igrave;/de,一yī,....
....
b68 = "煺tu&igrave;,柝tu&ograve;,膃......

cb = b1 & b2 &..... b67 & b68
ca = a1 & a2 & .....a67 & a68

Function pinyin(str, ab)
If Asc(str) > 0 Then '非中文,不轉換
pinyin = str
Exit Function
End If

If ab = "a" Then
p = InStr(ca, str)
If p > 0 Then
p2 = InStr(p, ca, ",")
pinyin = Mid(ca, p+1, p2 - p - 1)
End If
ElseIf ab = "b" Then
p = InStr(cb, str)
If p > 0 Then
p2 = InStr(p, cb, ",")
pinyin = Mid(cb, p+1, p2 - p - 1)
End If
End If

End Function


'---------------------- 將字元串轉換成拼音 --------------------------
Function Str2PY(str)
Str2PY = ""
For i = 1 To len(str)
Str2PY = Str2PY & pinyin(Mid(str, i, 1), "b")
Next
End Function

'----------------------- 測試 -----------------------
temp = InputBox("請輸入需要轉換成拼音的字元串:", "InputBox", "我是測試字元串,哈哈。…… English char is ok too.")
If Len(temp) > 0 Then
msgbox Str2PY(CStr(temp)), ,"Result"
End If

上面的程式碼都是示例程式碼,請下載附件,直接執行vbs就可看到效果

優點: 只要看懂了上面的原理,可以很容易移植到其它程序上
缺點: 能轉換的漢字有限,最強的是最後一個,收錄的漢字最多。前兩個只能轉換GB2312中的大部分漢字(基本夠用了,哈哈)
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
 



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 05:23 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1