首页 > 编程语言 >C#中实现校验是否包含中文与http接口地址中解析ip和端口号

C#中实现校验是否包含中文与http接口地址中解析ip和端口号

时间:2023-09-25 13:35:24浏览次数:45  
标签:http 字节 C# ip GB2312 subString 端口号 string

场景

Winform/CSharp中实现对Http接口地址、IP地址字符串格式/合法性校验:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/129616161

在上面的基础上对某http接口地址(ip加端口号,示例http://127.0.0.1:9092)

进行校验是否包含中文以及解析该地址获取ip和端口号

博客:
https://blog.csdn.net/badao_liumang_qizhi

实现

1、字符串中是否包含中文校验

GB2312码,是中华人民共和国国家汉字信息交换用编码,全称《信息交换用汉字编码字符集——基本集》,

由国家标准总局发布,1981年5月1日实施,通行于大陆。新加坡等地也使用此编码。

GB2312收录简化汉字及符号、字母、日文假名等共7445个图形字符,其中汉字占6763个。

GB2312规定“对任意一个图形字符都采用两个字节表示,每个字节均采用七位编码表示”,

习惯上称第一个字节为“高字节”,第二个字节为“低字节”。

GB2312 将代码表分为94个区,对应第一字节;每个区94个位,对应第二字节,

两个字节的值分别为区号值和位号值加32(2OH),因此也称为区位码。

01-09 区为符号、数字区,16-87区为汉字区,10-15区、88-94区是有待进一步标准化的空白区。

GB2312将收录的汉字分成两级:第一级是常用汉字计3755个,置于16-55区,按汉语拼音字母/笔形顺序排列;

第二级汉字是次常用汉字计3008个,置于56-87区,按部首/笔画顺序排列。

故而 GB2312最多能表示6763个汉字。GB2312的编码范围为2121H-777EH,与ASCII有重叠,

通行方法是将GB码两个字节的最高位置1以示区别。

代码实现

        /// <summary>
        /// 判断句子中是否含有中文
        /// </summary>
        /// <param >字符串</param>
        public bool WordsIScn(string words)
        {
            string TmmP;
            for (int i = 0; i < words.Length; i++)
            {
                TmmP = words.Substring(i, 1);
                byte[] sarr = Encoding.GetEncoding("gb2312").GetBytes(TmmP);
                if (sarr.Length == 2)
                {
                    return true;
                }
            }
            return false;
        }

2、解析如上示例的http接口地址的前缀获取ip和端口号

声明默认值为127.0.0.1和80端口

然后判断是否包含https,分别进行不同长度的截取后面的ip:端口号的内容

其次判断是否包含冒号,不包含则是80端口

包含则按照冒号进行split

这里不允许端口后面继续跟其他内容,否则split和转换为int出异常后直接返回false,代表校验不通过

然后将解析结果赋值给两个全局变量Global.Instance.apiIpString,Global.Instance.apiPort

代码实现

        /// <summary>
        /// 解析htpp接口字符串获取ip和端口号
        /// </summary>
        /// <param name="httpStr"></param>
        public static bool analysisIpPort(string httpStr)
        {
            string subString = string.Empty;
            string ipStr = "127.0.0.1";
            int port = 80;
            try {
                if (httpStr.Contains("https"))
                {
                    subString = httpStr.Substring(8);
                }
                else
                {
                    subString = httpStr.Substring(7);
                }
                //包含冒号则说明带端口号
                if (subString.Contains(":"))
                {
                    string[] result = subString.Split(':');
                    ipStr = result[0];
                    port = int.Parse(result[1]);
                }//否则使用默认80端口
                else
                {
                    ipStr = subString;
                }
                Global.Instance.apiIpString = ipStr;
                Global.Instance.apiPort = port;
                return true;
            }
            catch (Exception exception)
            {
                return false;
            }      
        }

标签:http,字节,C#,ip,GB2312,subString,端口号,string
From: https://www.cnblogs.com/badaoliumangqizhi/p/17727744.html

相关文章

  • 安装cuda Toolkit
    材料准备CUDAToolkit比如,我需要CUDAToolkit11.8.0,则点击这个CUDAToolkit11.8.0点击CUDAToolkit11.8.0的链接后,需要等待一段时间,如下图的内容SelectTargetPlatform需要很长时间才加载完成建议选择runfile.本文是使用runfile下载的使用wget下载CUDAToolkitwget......
  • Promise与Action的“爱恨情仇”
    都知道Vue中,或者准确地说是vuex中,action是异步函数(表现为actions中的函数),但我们怎么知道他们已经完成了呢?用过vuex的我们可能一时间想到了【观察计算属性的改变】的方法,但这不够理想。其实我们有更好的办法:在action中返回一个promise对象!另外,调用dispatch也会返回一个promise对象......
  • 封装继承多态和instanceof
    封装一般利用私有private把属性私有,使其无法被调用,想要调用就必须使用get/set快捷键Alt+insert方法来将其使用,它可以增强我们程序的安全性,同时再set的方法中我们可以加入关于变量能否被调用的一些限制get/set输出私有变量方法继承继承是类与类之间的关系,我们可以让子类通过ex......
  • 用智慧PC破局,华为引领产业新方向
    整个PC市场仍处于低迷之中,华为是唯一亮点。近日,捷孚凯市场咨询(中国)有限公司(以下简称GFK)发布了2023年7月份笔记本零售市场报告,中国大陆笔记本电脑零售市场季度销量同比下降10%,环比下降37%。而在轻薄本电脑细分零售市场中:华为品牌份额为23.6%,同比增长1.6%,环比增长4.4%。华为......
  • C++学习后感
    1. C++中的new和delete分别用来分配和释放内存,它们与C语言中malloc()、free()最大的一个不同之处在于:用。构造函数和析构函数对于类来说是不可或缺的,所以在C++中我们非常鼓励使用new和delete。析构就是清除空间,构造就是初始化。2.对于一个存在着标准输入输出的C++控制台......
  • Anaconda-CondaError: Downloaded bytes did not match Content-Length
    遇到如下情况:CondaError:DownloadedbytesdidnotmatchContent-Length,换源!condaconfig--addchannelshttps://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/condaconfig--addchannelshttps://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/#设置搜索时显......
  • FlashDuty Changelog 2023-09-21 | 自定义字段和开发者中心
    FlashDuty:一站式告警响应平台,前往此地址免费体验!自定义字段FlashDuty已支持接入大部分常见的告警系统,我们将推送内容中的大部分信息放到了Lables进行展示。尽管如此,我们用户还是会有一些扩展或定制性的需求,比如人工标记一个故障是否为误报。因此我们提供了自定义字段功能,......
  • 用智慧PC破局,华为引领产业新方向
    整个PC市场仍处于低迷之中,华为是唯一亮点。近日,捷孚凯市场咨询(中国)有限公司(以下简称GFK)发布了2023年7月份笔记本零售市场报告,中国大陆笔记本电脑零售市场季度销量同比下降10%,环比下降37%。而在轻薄本电脑细分零售市场中:华为品牌份额为23.6%,同比增长1.6%,环比增长4.4%。......
  • java读取resouces目录下文件
    resources中存放一些个资源文件,比如properties文件等,编译好会自动将这里边的文件复制到target/classes里去。获取资源文件的方法说明:XXX.class.getResourceAsStream()返回的是inputstreamXXX.class.getResource("/")返回URL,是classpath的位置XXX.class.getClassLoader().getRes......
  • IntelliJ Idea编译报错:请使用 -source 7 或更高版本以启用 diamond 运算符
    最近在使用IntelliJIdea遇到了挫折,分享出来给大家,问题由来是我导入了外部的java文件,结果就报错了错误的句子也提示出来了:KafkaConsumer<String,String>kafkaConsumer=newKafkaConsumer<>(props);网上搜了各种解决方法都不行,崩溃的节奏啊,终于皇天不负有心人,让我同事解决了,希......