当前位置:编程学习 > C#/ASP.NET >>

日语汉字转化为平假名

这周围绕[日语汉字转化为平假名](asp.net(c#))的问题,查阅了大量的资料,花费了很多时间和精力还没有解决这个问题,下面就自己解决问题的几个思路叙述一下,希望各位达人给与指教。
1, GetPhonetic
在asp.net(vb)中,用下面的这段代码很容易就实现,
Dim name As String
name = myName.Text.Trim().ToString()
Dim spacename As String
spacename = Strings.Replace(name, " ", "")      '全角のスペース
spacename = Strings.Replace(spacename, " ", "")   '半角のスペース
myFurigana.Text = CreateObject("Excel.Application").GetPhonetic(spacename)
微软为了推广他们的VBA,IFELanguage::GetPhonetic这个接口直接已经嵌入到里面了,只要引入Imports Microsoft.VisualBasic后,直接使用就ok了,可是在asp.net(c#)中,尽管引入了using Microsoft.VisualBasic,编译的时候出现了[object的GetPhonetic未定义]这样的错误,也就是说在asp.net(c#)中怎么去连接windows的接口呢?
2, Windows控件嵌入到.net中,.net中的windows控件只能在前台操作,我怎么去实现windows控件的触发事件呢?
c#自定义的日语汉字转化为平假名的textbox ,参考的是
http://cyzhou.spaces.live.com/blog/cns!C7264561BBA7DCEF!145.entry
3,使用KeyPress的事件,取得KeyAscii,如果KeyAscii得不到,再用KeyCode的组合,这种方法现在我还没有试验,这种方法尽管要考虑到很多种情况,很麻烦,估计能实现,但这不是根本解决对策。
--------------------编程问答-------------------- 帮顶 --------------------编程问答-------------------- 各位路过的达人给与指教 --------------------编程问答-------------------- up --------------------编程问答-------------------- 日语汉字... --------------------编程问答-------------------- ... --------------------编程问答-------------------- 帮顶 --------------------编程问答-------------------- 日语汉字,举例:输入了[山田]能够得到[ヤマダ]
--------------------编程问答-------------------- up --------------------编程问答-------------------- UP --------------------编程问答-------------------- up --------------------编程问答-------------------- public class MyForm : Form
    {
        //声明一些API函数
        [DllImport("imm32.dll")]
        public static extern IntPtr ImmGetContext(IntPtr hwnd);
        [DllImport("imm32.dll")]
        public static extern bool ImmGetOpenStatus(IntPtr himc);
        [DllImport("imm32.dll")]
        public static extern bool ImmSetOpenStatus(IntPtr himc, bool b);
        [DllImport("imm32.dll")]
        public static extern bool ImmGetConversionStatus(IntPtr himc, ref int lpdw, ref int lpdw2);
        [DllImport("imm32.dll")]
        public static extern int ImmSimulateHotKey(IntPtr hwnd, int lngHotkey);
        private const int IME_CMODE_FULLSHAPE = 0x8;
        private const int IME_CHOTKEY_SHAPE_TOGGLE = 0x11;
        //重载MyForm的OnActivated
        protected override void OnActivated(EventArgs e)
        {
            base.OnActivated(e);
            IntPtr HIme = ImmGetContext(this.Handle);
            if (ImmGetOpenStatus(HIme)) //如果输入法处于打开状态
            {
                int iMode = 0;
                int iSentence = 0;
                bool bSuccess = ImmGetConversionStatus(HIme, ref iMode, ref iSentence); //检索输入法信息
                if (bSuccess)
                {
                    if ((iMode & IME_CMODE_FULLSHAPE) > 0) //如果是全角
                    {
                        ImmSimulateHotKey(this.Handle, IME_CHOTKEY_SHAPE_TOGGLE); //转换成半角
                    }
                }
            }
        }
        /// <summary>
        /// 
        /// </summary>
        public void SetIme()
        {
            IntPtr HIme = ImmGetContext(this.Handle);
            if (ImmGetOpenStatus(HIme)) //如果输入法处于打开状态
            {
                int iMode = 0;
                int iSentence = 0;
                bool bSuccess = ImmGetConversionStatus(HIme, ref iMode, ref iSentence); //检索输入法信息
                if (bSuccess)
                {
                    if ((iMode & IME_CMODE_FULLSHAPE) > 0) //如果是全角
                    {
                        ImmSimulateHotKey(this.Handle, IME_CHOTKEY_SHAPE_TOGGLE); //转换成半角
                    }
                }
            }
        }
    } --------------------编程问答-------------------- UP --------------------编程问答-------------------- 1,c#应该跟vb不同库吧!!你应该是引用错误了!!
2,VBA里面不是可以后台操作吗? --------------------编程问答-------------------- 呵呵,学习 --------------------编程问答-------------------- 首先谢谢大家的关注,
To TZSZK的回答:
建立了一个继承于form的类,也就是说要在asp.net(c#)引用这个windows控件,那怎么使用这个windows控件的触发事件呢,或者说在.net中使用的windows控件怎么去触发它的事件呢?

To chuxue的回答:
其实解决这个问题的关键是在asp.net(c#)中引入IFELanguage::GetPhonetic这个接口,我在日文的网站也查了很多资料,[日语汉字转化为平假名]解决这个问题的.tbl都不是免费的。

--------------------编程问答-------------------- private void TextBox_Enter(object sender, EventArgs e)
        {
            SetIme();
        } --------------------编程问答-------------------- mark --------------------编程问答-------------------- 非常感谢tzszk的回答  ^^
今年3月份找一个在.net中的combox的资料时,涉及到了在.net的环境中建立windows控件的问题,当时找到了一个.dll文件,因为人的惰性也没有具体学习,昨天找了很多资料学习,在.net的页面中嵌套helloword的小例子后,使用tzszk说明方法,没有成功,说明一下操作的步骤:
1,Windows 控件库
①建立一个Windows 控件库项目取名为CSDNTextBox
② 建立了类public class MyForm:Form
②UserControl改名为MyTextBox,添加一个textbox
private void textBox1_Enter(object sender, System.EventArgs e)
{
    MyForm formmy1=new MyForm();
formmy1.SetIme();

}
 2, 创建html
<html>
<body>
<p>my textbox<br> <br></body>
<object id="MyTextBox1"
classid="http:CSDNTextBox.dll#CSDNTextBox.MyTextBox"
height="500" width="500" VIEWASTEXT>
</object>
<br><br>
</html>
http://localhost/kanaTextbox/CSDNtextbox.html运行后,出现下列的错误
[System.Security.Permissions.SecurityPermission]
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG\web_hightrust.config中
<IPermission 
class="SecurityPermission"
version="1"
Flags="Assertion, Execution, ControlThread, ControlPrincipal, RemotingConfiguration"
/>
改为
<IPermission 
class="SecurityPermission"
version="1"
Flags="AllFlags"
/>没有了错误提示,可是页面除了<body>
<p>my textbox<br> <br></body>没有显示出textbox
实在是想不明白,请求tzszk给与指教。
--------------------编程问答-------------------- 勉強しています --------------------编程问答-------------------- up --------------------编程问答-------------------- UP --------------------编程问答-------------------- tzszk 你用的是vb还是vc --------------------编程问答-------------------- up
--------------------编程问答-------------------- up
--------------------编程问答-------------------- 关注 --------------------编程问答-------------------- 学习下 --------------------编程问答-------------------- UP --------------------编程问答-------------------- 友情UP一下 --------------------编程问答-------------------- 汗,我觉得lz还是找一找相关的字词库

日文汉字又分音读和训读,音读的话一个字在不同的词中又有好几种读法,啊头大头大 --------------------编程问答-------------------- 这个问题搂主解决了没?我现在也遇到了。 --------------------编程问答-------------------- jf --------------------编程问答-------------------- 这个问题小弟解决了,哈哈! 
首先引入   Excel.dll   和   Microsoft.VisualBasic.dll 

    //振り仮名の取得のメソッド 
    public   static   string   GetKatakana(string   Hiragana) 
    { 
          string   Katakana   =   string.Empty; 
          //   Application対象の定義 
            Excel.Application   app   =   new   Excel.Application(); 
          //   振り仮名の取得 
            Katakana   =   app.GetPhonetic(Hiragana); 
          //   半角振り仮名の取得 
            Katakana   =   GetKatakanaHalf(Katakana); 
          //   結果の返却 
            return   Katakana; 
    } 
    
    //半角振り仮名の取得のメソッド 
    public   static   string   GetKatakanaHalf(string   Katakana) 
    { 
            string   KatakanaHalf   =   string.Empty; 
            //   全角片仮名の取得 
              KatakanaHalf   =   Microsoft.VisualBasic.Strings.StrConv(Katakana,   Microsoft.VisualBasic.VbStrConv.Narrow,0); 
            //   結果の返却 
              return   KatakanaHalf; 
    } --------------------编程问答-------------------- ding --------------------编程问答-------------------- 山田
井上
村上
田中
房内
水中
空中
地上
天上 --------------------编程问答-------------------- lz有没有解决问题?最近也遇到相同问题。 --------------------编程问答-------------------- 路过帮顶! --------------------编程问答--------------------
using Excel = Microsoft.Office.Interop.Excel;
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,