判断字符串的编码类型(GBK / UTF8)

转载 2011年01月10日 09:46:00
GBK:
_____________________________________________________________
int isgbk(char *s, size_t ns)
{
        if(ns > 2 && (uint8_t)*s >= 0x81 && (uint8_t)*s <= 0xfe
                && (
                        ((uint8_t)*(s+1) >= 0x80 && (uint8_t)*(s+1) <= 0x7e)
                        || ((uint8_t)*(s+1) >= 0xa1 && (uint8_t)*(s+1) <= 0xfe)
                    )
          )
        {
                return 1;
        }
        return 0;
}
_______________________________________________________________
 
bool isGBKCode(const string& strIn)
{
    unsigned char ch1;
    unsigned char ch2;

    if (strIn.size() >= 2)
    {
        ch1 = (unsigned char)strIn.at(0);
        ch2 = (unsigned char)strIn.at(1);
        if (ch1>=129 && ch1<=254 && ch2>=64 && ch2<=254)
            return true;
        else return false;
    }
    else return false;
}
______________________________________________________________
 
 
UTF8:
 
______________________________________________________________
int isutf8(char *s, size_t ns)
{
        uint8_t x = 0, i = 0, j = 0, nbytes = 0, n = 0;

        for(i = 1; i < 7; i++)
        {
                x = (uint8_t)(255 << i);
                if(((uint8_t)*s & x) == x)
                {
                        n = nbytes = (8 - i);
                        for(j = 0; (j < nbytes && j < ns); j++)
                        {
                                if((uint8_t)s[j] <= 0x80 && (uint8_t)s[j] >= 0xc0)break;
                                else n--;
                        }
                        if(n == 0) return nbytes;
                }
        }
        return 0;
}
______________________________________________________________

相关文章推荐

c/c++ 使用boost库实现的一个简单判断字符串编码的方法

自己记录一下,可能在某些情况下不能使用 #include #include #include #include #include "boost/locale.hpp" #include "b...

字符编码详解——彻底理解掌握编码知识,“乱码”不复存在

每一个程序员都不可避免的遇到字符编码的问题,特别是做Web开发的程序员,“乱码问题”一直是让人头疼的问题,也许您已经很少遇到“乱码”问题,然而,对解决乱码的方法的内在原理,您是否明白?本人作为一个程序...

用C语言检测文本编码的方法

我们经常会想知道某些文本文件的编码,可是编码检测却并不是一件简单的事情,它需要对文本进行采样,统计分析后再进行字符集的匹配,不过值得庆幸的是有uchardet(https://code.google....

快速搭建Android开发环境ADT-Bundle及Hello World

----下载JDK(Java Dev Kit) 官方下载:http://www.oracle.com/technetwork/java/javase/downloads/index.html ...
  • ds1121
  • ds1121
  • 2014-11-18 23:03
  • 12495

C++实例:判断字符串是否UTF8编码

ref :http://hi.baidu.com/lovevc2008/item/2b69a7caf224e62946d5c093 UTF8是以8bits即1Bytes为编码的最基本单位,当然也可以...
  • patdz
  • patdz
  • 2012-10-26 15:59
  • 4259

Dom4j中的中文编码问题

一、“中文问题没商量”之Dom4j中的编码问题    本文主要讲述的是Dom4j在把Document保存到文件过程中出现的一个中文问题,本文跟《80前》一文一样,以Spring项目无关,请“春迷...

字符编码的判断与转码

在项目开发中、我们经常会遇到字符出现乱码的情况、这个时候我们就需要用到转码来将其正常显示、在这里我们的思路是首先判断其编码、然后将其转换成我们需要的编码类型、 判断字符编码和转换编码代码如下: ...

linux C C++ 字符集转换,UTF-8,GB2312

在LINUX上进行编码转换时,既可以利用iconv函数族编程实现,也可以利用iconv命令来实现,只不过后者是针对文件的,即将指定文件从一种编码转换为另一种编码。 一、利用iconv函数族进行编码转换...

c语言使用iconv函数实现字符编码转换

c语言使用iconv函数实现字符编码转换 linux下提供了iconv库来实现字符编码转换,先介绍下命令行: iconv [-f encoding] [-t encoding] [inputfile ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)