⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 半角2全角.txt

📁 网上收集的几个半角字符转全角字符的函数。
💻 TXT
字号:
/// <summary>
    /// 判断字符是否英文半角字符或标点
    /// </summary>
    /// <remarks>
    /// 32    空格
    /// 33-47    标点
    /// 48-57    0~9
    /// 58-64    标点
    /// 65-90    A~Z
    /// 91-96    标点
    /// 97-122    a~z
    /// 123-126  标点
    /// </remarks>
    public static bool IsBjChar(char c)
    {
      int i = (int)c;
      return i >= 32 && i <= 126;
    }

    /// <summary>
    /// 判断字符是否全角字符或标点
    /// </summary>
    /// <remarks>
    /// <para>全角字符 - 65248 = 半角字符</para>
    /// <para>全角空格例外</para>
    /// </remarks>
    public static bool IsQjChar(char c)
    {
      if (c == '\u3000') return true;

      int i = (int)c - 65248;
      if (i < 32) return false;
      return IsBjChar((char)i);
    }

    /// <summary>
    /// 将字符串中的全角字符转换为半角
    /// </summary>
    public static string ToBj(string s)
    {
      if (s == null || s.Trim() == string.Empty) return s;

      StringBuilder sb = new StringBuilder(s.Length);
      for (int i = 0; i < s.Length; i++)
      {
        if (s[i] == '\u3000')
          sb.Append('\u0020');
        else if (IsQjChar(s[i]))
          sb.Append((char)((int)s[i] - 65248));
        else
          sb.Append(s[i]);
      }

      return sb.ToString();
    }
2005-9-29 发现更简单的方法。

添加 Microsoft Visual Basic.NET Runtime 引用。

Console.WriteLine(Microsoft.VisualBasic.Strings.StrConv("abcdefg", VbStrConv.Narrow, 0));






String Asc2Hz(String s)
{
  String hz="";
  for (int i=1;i<=s.Length();i++)
    {
      BYTE  c=s[i];
      if (c>' ' && c<'~')
          hz=hz+String((char)163)+String((char)(128+c));
      else if(c==' ')//半角空格转换为全角
          hz=hz+String((char)161)+String((char)161);
      else
          hz=hz+String((char)c);
    }
  return(hz);
}

String Hz2Asc(String s)
{
    String Asc="";
    BYTE c1,c2;
    for(int i=1;i<=s.Length();i++)
    {
        c1=s[i];
        c2=s[i+1];
        if (c1==163)//判断是否为全角字符
        {
            Asc=Asc+String((char)(c2-128));
            i++;
            continue;
        }
        if (c1>163)//判断是否为文字
        {
            Asc=Asc+String((char)c1);
            Asc=Asc+String((char)c2);
            i++;
            continue;
        }
        if ((c1==161)&&(c2==161))//全角空格是个特例,另加处理
        {
            Asc=Asc+" ";
            i++;
            continue;
        }
        Asc=Asc+String(char(c1));
    }
    return Asc;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    Edit3->Text=Hz2Asc(Edit2->Text);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
    Edit2->Text=Asc2Hz(Edit1->Text);

}












String AscToHz(String s)
{
  String  hz="";
  for (int i=1;i<=s.Length();i++)
  {
  BYTE c=s[i];
   if(c>' '&&c<='~')
   {
   hz=hz+String((char)163)+String((char)(128+c));
   }
   else
   {
      hz=hz+String((char)c);
    }
  }
return(hz);
}


//全角变半角
String HzToAsc(String s)
{
  String  hz="";
  for (int i=1;i<=(s.Length()-1);i++)
  {
  BYTE c=s[i];
    if(c==163)
    {
    hz=hz+String((char)(s[i+1]-128));
    i++;
    }
    else
    {
       if (c==161)
       {
          BYTE d=s[i+1];
          if (d==161)
          {
          hz=hz+String(' ');
          i++;
          }
           else
           {
           hz=hz+String((char)c);
           }
        }
        else
        {
        hz=hz+String((char)c);
        }
      }
    }
hz=hz+String((char)s[s.Length()]);
return(hz);
}
}















zswang(伴水清清)(专家门诊清洁工)   写的,参考一下吧   
  void   Str2GBReplace(CString   &mString)   
  {   
  mString.Replace("   ",   " ");   
  mString.Replace("!",   "!");   
  mString.Replace("""",   """);   
  mString.Replace("#",   "#");   
  mString.Replace("$",   "$");   
  mString.Replace("%",   "%");   
  mString.Replace("&",   "&");   
  mString.Replace("'",   "'");   
  mString.Replace("(",   "(");   
  mString.Replace(")",   ")");   
  mString.Replace("*",   "*");   
  mString.Replace("+",   "+");   
  mString.Replace(",",   ",");   
  mString.Replace("-",   "-");   
  mString.Replace(".",   "。");   
  mString.Replace("/",   "/");   
  mString.Replace("0",   "0");   
  mString.Replace("1",   "1");   
  mString.Replace("2",   "2");   
  mString.Replace("3",   "3");   
  mString.Replace("4",   "4");   
  mString.Replace("5",   "5");   
  mString.Replace("6",   "6");   
  mString.Replace("7",   "7");   
  mString.Replace("8",   "8");   
  mString.Replace("9",   "9");   
  mString.Replace(":",   ":");   
  mString.Replace(";",   ";");   
  mString.Replace("<",   "<");   
  mString.Replace("=",   "=");   
  mString.Replace(">",   ">");   
  mString.Replace("?",   "?");   
  mString.Replace("@",   "@");   
  mString.Replace("A",   "A");   
  mString.Replace("B",   "B");   
  mString.Replace("C",   "C");   
  mString.Replace("D",   "D");   
  mString.Replace("E",   "E");   
  mString.Replace("F",   "F");   
  mString.Replace("G",   "G");   
  mString.Replace("H",   "H");   
  mString.Replace("I",   "I");   
  mString.Replace("J",   "J");   
  mString.Replace("K",   "K");   
  mString.Replace("L",   "L");   
  mString.Replace("M",   "M");   
  mString.Replace("N",   "N");   
  mString.Replace("O",   "O");   
  mString.Replace("P",   "P");   
  mString.Replace("Q",   "Q");   
  mString.Replace("R",   "R");   
  mString.Replace("S",   "S");   
  mString.Replace("T",   "T");   
  mString.Replace("U",   "U");   
  mString.Replace("V",   "V");   
  mString.Replace("W",   "W");   
  mString.Replace("X",   "X");   
  mString.Replace("Y",   "Y");   
  mString.Replace("Z",   "Z");   
  mString.Replace("[",   "[");   
  mString.Replace("\\",   "\");   
  mString.Replace("]",   "]");   
  mString.Replace("^",   "^");   
  mString.Replace("_",   "_");   
  mString.Replace("`",   "`");   
  mString.Replace("a",   "a");   
  mString.Replace("b",   "b");   
  mString.Replace("c",   "c");   
  mString.Replace("d",   "d");   
  mString.Replace("e",   "e");   
  mString.Replace("f",   "f");   
  mString.Replace("g",   "g");   
  mString.Replace("h",   "h");   
  mString.Replace("i",   "i");   
  mString.Replace("j",   "j");   
  mString.Replace("k",   "k");   
  mString.Replace("l",   "l");   
  mString.Replace("m",   "m");   
  mString.Replace("n",   "n");   
  mString.Replace("o",   "o");   
  mString.Replace("p",   "p");   
  mString.Replace("q",   "q");   
  mString.Replace("r",   "r");   
  mString.Replace("s",   "s");   
  mString.Replace("t",   "t");   
  mString.Replace("u",   "u");   
  mString.Replace("v",   "v");   
  mString.Replace("w",   "w");   
  mString.Replace("x",   "x");   
  mString.Replace("y",   "y");   
  mString.Replace("z",   "z");   
  mString.Replace("{",   "{");   
  mString.Replace("|",   "|");   
  mString.Replace("}",   "}");   
  mString.Replace("~",   "~");   
  } 












/*在Edit1中输入全角字符、中文、半角字符或混杂输入。
单击Button1,Edit1中的文字显示到Edit2中并转换了所有的全角字符。
注意,程序没有对特殊字符如255(按住ALT再按小键盘的2、5、5输入)等作出正确反应。*/
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        int nLength=Edit1->Text.Length();
        if (nLength==0)
                return;
        AnsiString str="";
        char *cTmp=new char[nLength+1];
        StrPCopy(cTmp,Edit1->Text);
        BYTE c1,c2;
        int i;
        for (i=0;i<nLength;i++)
        {
                c1=cTmp[i];
                c2=cTmp[i+1];
                if (c1==163)//判断是否为全角字符
                {

                        str=str+AnsiString((char)(c2-128));
                        i++;
                        continue;
                 }
                if (c1>163)//判断是否为文字
                {

                        str=str+AnsiString((char)c1);
                        str=str+AnsiString((char)c2);
                        i++;
                        continue;
                }
                if ((c1==161) && (c2==161))//全角空格是个特例,另加处理
                        {
                                str=str+" ";
                                i++;
                                continue;
                        }
                str=str+ AnsiString(char(c1));
        }
        Edit2->Text=str;
        delete cTmp;cTmp=NULL;
} 

  以上代码C++Builder5.0/Win98 SE下编译通过。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -