C# 非法字符转译

using System;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;

namespace 特殊字符转译
{
    public class StringOperate
    {
        /// <summary>
        /// 判断字符串中是否包含非法字符
        /// </summary>
        /// <param name="strInput"></param>
        /// <returns></returns>
        public static bool HasInvalidChars(string strInput)
        {
            if (strInput.IndexOfAny(Path.GetInvalidFileNameChars()) != -1)
            {
                return true;
            }
            else
                return false;
        }

        /// <summary>
        /// 获取字符串的单字符长度
        /// </summary>
        /// <param name="strInput"></param>
        /// <returns></returns>
        public static int GetSingleCharCount(string strInput)
        {
            int count = 0;
            try
            {
                Regex regex = new Regex("^[\u4E00-\u9FA5]{0,}$");
                List<string> allChrs = new List<string>();
                char[] array = strInput.ToCharArray();
                for (int i = 0; i < array.Length; i++)
                {
                    allChrs.Add(array[i].ToString());
                }
                for (int i = 0; i < allChrs.Count; i++)
                {
                    count += 1;
                    if (regex.IsMatch(allChrs[i],0))
                    {
                        count += 1;
                    }
                }
                return count;
            }
            catch (System.Exception ex)
            {
                return count;
            }
        }

        /// <summary>
        ///  将文件路径中的非法字符转全角(不是非法字符不转译)
        /// </summary>
        /// <param name="strInput"></param>
        /// <returns></returns>
        public static string InvalidPathToSBC(string strPath)
        {
            string reVal = string.Empty;
            try
            {
                List<string> allChrs = new List<string>();
                char[] array = strPath.ToCharArray();
                for (int i = 0; i < array.Length; i++)
                {
                    allChrs.Add(array[i].ToString());
                }
                for (int i = 0; i < allChrs.Count; i++)
                {
                    if (allChrs[i].IndexOfAny(Path.GetInvalidFileNameChars()) >= 0)
                    {
                        allChrs[i] = ToSBC(allChrs[i]);
                    }
                    reVal += allChrs[i];
                }
                return reVal;
            }
            catch (System.Exception ex)
            {
                return reVal;
            }
        }

        /// <summary>
        /// 将文件名称中的非法字符转全角(不是非法字符不转译)
        /// </summary>
        /// <param name="strInput"></param>
        /// <returns></returns>
        public static string InvalidFileNameToSBC(string strInput)
        {
            string reVal = string.Empty;
            try
            {
                List<string> allChrs = new List<string>();
                char[] array = strInput.ToCharArray();
                for (int i = 0; i < array.Length; i++)
                {
                    allChrs.Add(array[i].ToString());
                }
                for (int i = 0; i < allChrs.Count; i++)
                {
                    if (allChrs[i].IndexOfAny(Path.GetInvalidFileNameChars()) >= 0)
                    {
                        allChrs[i] = ToSBC(allChrs[i]);
                    }
                    reVal += allChrs[i];
                }
                return reVal;
            }
            catch (System.Exception ex)
            {
                return reVal;
            }
        }

        /// <summary>
        ///字符转全角
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static string ToSBC(string input)
        {
            char[] array = input.ToCharArray();
            for (int i = 0; i < array.Length; i++)
            {
                if (array[i] == 32)
                {
                    array[i] = (char)12288;
                    continue;
                }
                if (array[i] < 127)
                {
                    array[i] = (char)(array[i] + 65248);
                }
            }
            return new string(array);
        }

        /// <summary>
        /// 字符转半角
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static string ToDBC(string input)
        {
            char[] array = input.ToCharArray();
            for (int i = 0; i < array.Length; i++)
            {
                if (array[i] == 12288)
                {
                    array[i] = (char)32;
                    continue;
                }
                if (array[i] > 65280 && array[i] < 65375)
                {
                    array[i] = (char)(array[i] - 65248);
                }
            }
            return new string(array);
        }

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值