如何将中文输入法下的标点符号转化为英文标点

时间:2021-04-12 06:43:40
如题,不管是半角还是全角,只要转化为英文状态的标点符号
希望能否提供比较快捷的方式。

8 个解决方案

#1


public string ToSBC(string input)

    char[] c=input.ToCharArray();
   for (int i = 0; i < c.Length; i++)
    {
     if (c[i]==32)
     {
      c[i]=(char)12288; continue;
     }
     if (c[i]<127) c[i]=(char)(c[i]+65248);
   }
return new string(c);
}

#2


路过,看看

#3


to 人生如梦
如果字数比较多的话,按照你的方式会不会影响速度啊

#4


引用 3 楼 jsnjlhb 的回复:
to 人生如梦
如果字数比较多的话,按照你的方式会不会影响速度啊

不会。很快的。

#5


to 人生如梦
我需要的是转化标点符号,把中文状态下的转为英文状态下的
继续期待

#6



static void Main(string[] args)
{
    Console.WriteLine(MyReplace("test。"));
    Console.ReadKey();
}

public static string MyReplace(string text)
{
    const string s1 = "。;,?!、“”‘’";
    const string s2 = @".;,?!\""""''";
    char[] c = text.ToCharArray();
    for (int i = 0; i < c.Length; i++)
    {
        int n = s1.IndexOf(c[i]);
        if (n != -1) c[i] = s2[n];
    }
    return new string(c);
}

#7


问题还是没有解决。我在网上找到一些半角全角转换的函数,但是中文的句号。还是无法转换呢。 

 /**//// <summary>
        /// 转半角的函数(DBC case)
        /// </summary>
        /// <param name="input">任意字符串</param>
        /// <returns>半角字符串</returns>
        ///<remarks>
        ///全角空格为12288,半角空格为32
        ///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
        ///</remarks>
        public string ToDBC(string input)
        {    
            char[] c=input.ToCharArray();
            for (int i = 0; i < c.Length; i++)
            {
                if (c[i]==12288)
                {
                    c[i]= (char)32;
                    continue;
                }
                if (c[i]>65280 && c[i]<65375)
                    c[i]=(char)(c[i]-65248);
            }    
            return new string(c);
        }


我跟踪了一下,中文句号时12290,并不是像他们所说的在全角(65281-65374)之间啊
请问这是怎么回事
有没有更好的解决办法啊

#8


自己再顶

#1


public string ToSBC(string input)

    char[] c=input.ToCharArray();
   for (int i = 0; i < c.Length; i++)
    {
     if (c[i]==32)
     {
      c[i]=(char)12288; continue;
     }
     if (c[i]<127) c[i]=(char)(c[i]+65248);
   }
return new string(c);
}

#2


路过,看看

#3


to 人生如梦
如果字数比较多的话,按照你的方式会不会影响速度啊

#4


引用 3 楼 jsnjlhb 的回复:
to 人生如梦
如果字数比较多的话,按照你的方式会不会影响速度啊

不会。很快的。

#5


to 人生如梦
我需要的是转化标点符号,把中文状态下的转为英文状态下的
继续期待

#6



static void Main(string[] args)
{
    Console.WriteLine(MyReplace("test。"));
    Console.ReadKey();
}

public static string MyReplace(string text)
{
    const string s1 = "。;,?!、“”‘’";
    const string s2 = @".;,?!\""""''";
    char[] c = text.ToCharArray();
    for (int i = 0; i < c.Length; i++)
    {
        int n = s1.IndexOf(c[i]);
        if (n != -1) c[i] = s2[n];
    }
    return new string(c);
}

#7


问题还是没有解决。我在网上找到一些半角全角转换的函数,但是中文的句号。还是无法转换呢。 

 /**//// <summary>
        /// 转半角的函数(DBC case)
        /// </summary>
        /// <param name="input">任意字符串</param>
        /// <returns>半角字符串</returns>
        ///<remarks>
        ///全角空格为12288,半角空格为32
        ///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
        ///</remarks>
        public string ToDBC(string input)
        {    
            char[] c=input.ToCharArray();
            for (int i = 0; i < c.Length; i++)
            {
                if (c[i]==12288)
                {
                    c[i]= (char)32;
                    continue;
                }
                if (c[i]>65280 && c[i]<65375)
                    c[i]=(char)(c[i]-65248);
            }    
            return new string(c);
        }


我跟踪了一下,中文句号时12290,并不是像他们所说的在全角(65281-65374)之间啊
请问这是怎么回事
有没有更好的解决办法啊

#8


自己再顶