如何得到一个汉字的声调?

JeanLaw 2004-07-15 08:53:43
如何得到一个汉字的拼音声调?就是一声、二声,平仄的那个声调。
...全文
660 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ryuginka 2004-07-15
  • 打赏
  • 举报
回复
up
JeanLaw 2004-07-15
  • 打赏
  • 举报
回复
?
JeanLaw 2004-07-15
  • 打赏
  • 举报
回复
厉害,终于解决了.
hxh2004 2004-07-15
  • 打赏
  • 举报
回复
强,
虽然我没有仔细看,但是还是佩服佩服
northwolves 2004-07-15
  • 打赏
  • 举报
回复
Option Explicit

Private Const IME_ESC_MAX_KEY = &H1005
Private Const IME_ESC_IME_NAME = &H1006
Private Const GCL_REVERSECONVERSION = &H2
Private Declare Function GetKeyboardLayoutList Lib "user32" (ByVal nBuff As Long, lpList As Long) As Long
Private Declare Function ImmEscape Lib "imm32.dll" Alias "ImmEscapeA" (ByVal hkl As Long, ByVal himc As Long, ByVal un As Long, lpv As Any) As Long
Private Declare Function ImmGetConversionList Lib "imm32.dll" Alias "ImmGetConversionListA" (ByVal hkl As Long, ByVal himc As Long, ByVal lpsz As String, lpCandidateList As Any, ByVal dwBufLen As Long, ByVal uFlag As Long) As Long
Private Declare Function IsDBCSLeadByte Lib "kernel32" (ByVal bTestChar As Byte) As Long
Public Function GetChineseSpell(ByVal CHINESE As String, Optional PYTYPE As Integer = 0, Optional Delimiter As String = " ") As String

If Len(Trim(CHINESE)) > 0 Then
Dim i As Long
Dim s As String
s = Space(255)
Dim IMEInstalled As Boolean
Dim j As Long
Dim a() As Long

ReDim a(255) As Long
j = GetKeyboardLayoutList(255, a(LBound(a)))

For i = LBound(a) To LBound(a) + j - 1
If ImmEscape(a(i), 0, IME_ESC_IME_NAME, ByVal s) Then
If Trim("微软拼音输入法") = Replace(Trim(s), Chr(0), "") Then
IMEInstalled = True
Exit For
End If
End If
Next i
If IMEInstalled Then
CHINESE = Trim(CHINESE)
Dim sChar As String
Dim Buffer0() As Byte
Dim bBuffer0() As Byte
Dim bBuffer() As Byte
Dim k As Long
Dim l As Long
Dim m As Long
For j = 0 To Len(CHINESE) - 1
sChar = Mid(CHINESE, j + 1, 1)
' If Not InStr("《》,。/?、][{}“”‘’;:!·〈〉「」『』|〖〗【】()[]{}…—.,""'';:?/\!", sChar) > 0 Then
Buffer0 = StrConv(sChar, vbFromUnicode)
If IsDBCSLeadByte(Buffer0(0)) Then
k = ImmEscape(a(i), 0, IME_ESC_MAX_KEY, Null)
If k Then
l = ImmGetConversionList(a(i), 0, sChar, 0, 0, GCL_REVERSECONVERSION)
If l Then
s = Space(255)
If ImmGetConversionList(a(i), 0, sChar, ByVal s, l, GCL_REVERSECONVERSION) Then

bBuffer0 = StrConv(s, vbFromUnicode)
ReDim bBuffer(k * 2 - 1)
For m = bBuffer0(24) To bBuffer0(24) + k * 2 - 1
bBuffer(m - bBuffer0(24)) = bBuffer0(m)
Next m
sChar = Trim(StrConv(bBuffer, vbUnicode))
If InStr(sChar, vbNullChar) Then
sChar = Trim(Left(sChar, InStr(sChar, vbNullChar) - 1))
End If
End If
End If

End If
End If
' End If
GetChineseSpell = GetChineseSpell & Switch(PYTYPE = 0, sChar, PYTYPE = 1, Left(sChar, Len(sChar) - 1), PYTYPE = 2, UCase(Left(sChar, 1))) & IIf(PYTYPE = 2, "", Delimiter) ''返回全拼
Next j
Else ''没安装“微软拼音输入法”,返回一个空格
GetChineseSpell = " "
End If
Else
GetChineseSpell = "" ''输入为空字符串
End If
End Function

Private Sub Command1_Click()
MsgBox GetChineseSpell("人", 0) & vbCrLf & GetChineseSpell("人", 1) & vbCrLf & GetChineseSpell("人", 2) ' right(GetChineseSpell("人", 0),1)为声调
End Sub
netbandit 2004-07-15
  • 打赏
  • 举报
回复
太难了,而且一个汉字有些有好几个音调,我觉得没必要去做!!!
zyguyue 2004-07-15
  • 打赏
  • 举报
回复
是啊,要建库阿
fxy_2002 2004-07-15
  • 打赏
  • 举报
回复
自己做对照表,然后再查。没简单方法!
用搜狗拼音巧妙快速输入带声调的拼音 http://blog.sina.com.cn/s/blog_b80f1eda01019tzt.html, 由于原下载链接失效,从网上另外找到的 打拼音编码表 doc txt 文件,动手能力强的可以自己修改编码。 1、下载打“打拼音编码表”,然后双击打开,复制里面的全部内容。 http://pan.baidu.com/share/link?shareid=165845&uk=2953696665 2、打开搜狗拼音输入法的属性设置对话框,选择“高级”标签 3、在对话框中点击“自定义短语设置”,打开对话框。 4、点击“直接编辑配置文件”,在弹出的消息框中,点击确定,会打开一个记事本 5、把已经复制的打拼音编码直接粘贴到里面,可以覆盖掉原来的内容。 然后点击【文件】里的【保存】,接着关闭这个记事本。 6、回到输入法设置界面,点击确定。 7、这样你的搜狗拼音输入法就可以在不切换到英文状态的情况下,快速打出带有声调的汉语拼音了。   使用方法 输入完整的拼音字母,紧接着输入代表声调一个字母。1 2 3 4 声分别用 H J K L 表示。如输入“语”的拼音,只需输入“yuk”就可以得到 yǔ 了。 注意:只能输入单字的拼音,不能输入词语的拼音。 还有从csdn下载的软件专门用于输入拼音和声调: 打普通话的带声调的拼音,使用bcdf分别代表1234声。 还有网上下载的拼音编码表 共20902个汉字,格式如下 座 zuo4 袏 zuo4 做 zuo4 葄 zuo4 蓙 zuo 飵 zuo4 糳 zuo4 咗 zuo5

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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