精华内容
下载资源
问答
  • utf16<=> utf8 <=> ascii <=>unicode 所有代码都已经经过验证。而且里面也有相应的例子。 所有的编码格式进行转换,windows平台。
  • ASCIIUTF-8 字符互相转换
  • 字符编码:ASCII UTF-8编码

    千次阅读 2018-10-04 22:42:09
    字符编码:ASCII UTF-8 编码 在计算机内部,所有的数据都是以二进制0、1表示,每个二进制位为一个比特(Bit),但是一个Bit能表示的信息太少,所以一个最小的操作单位应该包含多个多个比特,起初这个单位并没有...

    字符编码:ASCII 与 UTF-8 编码

    在计算机内部,所有的数据都是以二进制0、1表示,每个二进制位为一个比特(Bit),但是一个Bit能表示的信息太少,所以一个最小的操作单位应该包含多个多个比特,起初这个单位并没有统一标准,有4比特一个单位的,也有7个、8个比特一个单位的,但是最终还是8比特单位一统江湖,这就有了后来的 1Byte= 8Bit。

    为什么需要对字符编码呢?如果没有字符编码,通过计算机进行聊天时,可能是这样的:A->B:01101000 01101001,B收到信息之后可能就需要查字典去了,那为什么计算机不帮我查好呢!所以编码就是二进制与字符的转换关系。

    ASCII编码

    1967年美国制定了一套编码规范,其中规定了 128 个字符与二进制的对应关系,称之为 ASCII 编码,二进制范围是 0-127:[00000000,011111111],可以看出来最高位没有使用。

    虽然 ASCII 规范出来了,但是存在很多不足,主要原因是它所包含的字符集太小,只有拉丁字母、阿拉伯字符、英文标点和一些控制字符,此时欧洲人第一个站出来表示不高兴,比如意大利语的字符 Á 没法表示,正好ASCII 编码中最高位被闲置了,把这部分进行利用,将ASCII 从7位扩展成了8位,这就是扩展ASCII(EASCII)。

    将 ASCII 编码扩展之后,欧洲人高兴了,但是其他语音还是不能处理。为了解决这些语言的编码问题,各国开始搞自己的编码,这期间产生了许多种编码格式,比如常见的汉字编码格式 GB-2312。各个国家都采用不同的编码,这样是没办法相互通信的,所以需要有一种编码,能够涵盖所有语言符号,这就是 Unicode。

    Unicode 编码

    Unicode 也叫万国码、统一码、国际码,它是为了解决各个编码格式的不兼容问题,它为各个语言字符进行了编号,比如汉字“你”编号为 0x4f60,“好”编号为 0x597d。

    Unicode 只是对各个语言字符进行了编号,但是没有对编号如何存储、存储几个字节进行规定,还是以汉字“你”为例,它的编号是 0x4f60,最少可以用两个字节来存储,也可以用3个、4个;另一个问题是计算机怎么判断这两个字节是一个Unicode字符还是两个ASCII字符呢。基于这些问题,产生了多种 Unicode 字符集实现格式,其中就包括 UTF-8.

    UTF-8 编码实现

    UTF-8 全称是 8 Bit Unicode Transformation Format,UTF-8是Unicode编码的具体实现方式之一,它最主要的优点就是可变长度,字符编码通常由 1-4 个字节来表示(存在5、6个字节的字符,但是不在 Unicode 字符集中),相比定长的实现方式,能够节省更多的空间。

    针对任意字符编码,它的编码规则如下:

    1. 对于单字节字符,字节的最高比特位设置为0。
    2. 多字节序列的首字节的最高有效位决定了字节序列的长度,最高有效位有几个连续的 1,表示字节序列多长,比如首字节为 11000000 表示是2个字节,11100000 表示3个字节,11110000表示4个字节。
    3. 多字节序列除首字节遵守规则2之外,其他字节最高有效位为10。

    根据上面的规则,对各个长度的字节序列总结如下:

    字节序列码点位数码点起值码点终值Byte 1Byte 2Byte 3Byte 4
    17U+0000U+007F0xxxxxxx
    211U+0080U+07FF110xxxxx10xxxxxx
    316U+0800U+FFFF1110xxxx10xxxxxx10xxxxxx
    421U+10000U+1FFFFF11110xxx10xxxxxx10xxxxxx10xxxxxx

    对于UTF-8编码中的任意字节B,如果B的第一位为0,则B独立的表示一个字符(ASCII码);

    1. 如果B的第一位为1,第二位为0,则B为一个多字节字符中的一个字节(非ASCII字符);
    2. 如果B的前两位为1,第三位为0,则B为两个字节表示的字符中的第一个字节;
    3. 如果B的前三位为1,第四位为0,则B为三个字节表示的字符中的第一个字节;
    4. 如果B的前四位为1,第五位为0,则B为四个字节表示的字符中的第一个字节;

    因此,对UTF-8编码中的任意字节,根据第一位,可判断是否为ASCII字符;根据前二位,可判断该字节是否为一个字符编码的第一个字节;根据前四位(如果前两位均为1),可确定该字节为字符编码的第一个字节,并且可判断对应的字符由几个字节表示;根据前五位(如果前四位为1),可判断编码是否有错误或数据传输过程中是否有错误。

    关于BOM

    通常在保存UTF-8的时候,这里以 NotePad++ 为例, 会出现两个可选项:UTF-8,UTF-8-BOM,那么这两个选项有什么区别呢?很明显就是一个带BOM、一个不带BOM。BOM全名是字节顺序标记(Byte-Order-Mark),它存储在文件的开头,用来表示文件的字节顺序是大端还是小端,BOM通常是一个 U+FEFF 字符,UTF-8 一般是 EF、BB、BF。

    对于 UTF-8 来说,BOM是完全没有存在的必要的,因为 UTF-8 是直接操作的单个字节,而非操作多字节整形(比如C的int),所以不存在大小端问题,UTF-8 文件的 BOM 作用只是表示这个文件是一个 Unicode 编码文件。

    对于需要进行网络传输的 UTF-8 文件来说,谨慎使用 BOM,因为它会影响字符内容的解析,当从数据流解析出来的 UTF-8 字符在开头出现乱码,那么八成是 BOM 引起的。

    最后需要提醒的是,使用 Windows 的记事本存储为 UTF-8 格式的时候,默认是添加 BOM 头的!!!所以珍爱生命,远离记事本!

    ASCII编码
    UTF-8编码
    字符编码

    展开全文
  • ASCII及中文转UTF8工具

    2015-12-22 21:50:11
    1.本软件可以把任意中文、英文以及数字字符等转换成UTF8格式的16进制字节数组,可以用于C语言、VB、汇编语言等程序中。 2.直接在输入框中输入,可以自动转换。 3.切换不同的格式,(0xFF, &hFF, HFF等格式),自动...
  • UTF_8 ASCII之间的转换

    千次阅读 2016-12-21 16:12:02
    //使用:Convert(strA_in,strB_out,CP_UTF8,CP_ACP)//UTF8转换ANSI // Convert(strA_out, strB_in, CP_ACP, CP_UTF8)//ANSI转换UTF8 void Convert(const char* strIn, char* strOut, int sourceCodepage, int ...
    

    //使用:Convert(strA_in,strB_out,CP_UTF8,CP_ACP)//UTF8转换ANSI
    // Convert(strA_out, strB_in, CP_ACP, CP_UTF8)//ANSI转换UTF8
    void Convert(const char* strIn, char* strOut, int sourceCodepage, int targetCodepage)
    {
     int len = lstrlen(strIn);
     int unicodeLen = MultiByteToWideChar(sourceCodepage, 0, strIn, -1, NULL, 0);
    
     wchar_t* pUnicode = NULL;
     pUnicode = new wchar_t[unicodeLen + 1];
     memset(pUnicode, 0, (unicodeLen + 1)*sizeof(wchar_t));
     MultiByteToWideChar(sourceCodepage, 0, strIn, -1, (LPWSTR)pUnicode, unicodeLen);
    
     BYTE * pTargetData = NULL;
     int targetLen = WideCharToMultiByte(targetCodepage, 0, (LPWSTR)pUnicode, -1, (char *)pTargetData, 0, NULL, NULL);
    
     pTargetData = new BYTE[targetLen + 1];
     memset(pTargetData, 0, targetLen + 1);
     WideCharToMultiByte(targetCodepage, 0, (LPWSTR)pUnicode, -1, (char *)pTargetData, targetLen, NULL, NULL);
     lstrcpy(strOut, (char*)pTargetData);
    
     delete pUnicode;
     delete pTargetData;
    }
    

    展开全文
  • UTF8 to ASCII & ASCII to UTF8

    千次阅读 2018-04-08 18:52:45
    string UTF82ASCII(const char* cont) { if (NULL == cont) { return string(""); } int num = MultiByteToWideChar(CP_UTF8, NULL, cont, -1, NULL, NULL); wchar_t* buffw = new wcha...
    string UTF82ASCII(const char* cont)
    {
        if (NULL == cont)
        {
            return string("");
        }
        int num = MultiByteToWideChar(CP_UTF8, NULL, cont, -1, NULL, NULL);
        wchar_t* buffw = new wchar_t[(unsigned int)num];
        MultiByteToWideChar(CP_UTF8, NULL, cont, -1, buffw, num);
        int len = WideCharToMultiByte(CP_ACP, 0, buffw, num - 1, NULL, NULL, NULL, NULL); 
        char* lpsz = new char[(unsigned int)len + 1]; 
        WideCharToMultiByte(CP_ACP, 0, buffw, num - 1, lpsz, len, NULL, NULL);
        lpsz[len]='\0';
        delete[] buffw;
        string rtn(lpsz);
        delete[] lpsz;
        return rtn ;  
    }
    
    /*********************************************************
    函数名:	A2UTF8
    函数描述:	多字节转UTF8
    输入参数:	cont - 多字节字符串                       
    输出参数:	
    返回值:	    UTF8编码的字符串
    **********************************************************/
    string ASCII2UTF8(const char* cont)
    {
        if (NULL == cont)
        {
            return string("");
        }
        
        int num = MultiByteToWideChar(CP_ACP, NULL, cont, -1, NULL, NULL);
        wchar_t* buffw = new wchar_t[(unsigned int)num];
        MultiByteToWideChar(CP_ACP, NULL, cont, -1, buffw, num);
        
        int len = WideCharToMultiByte(CP_UTF8, 0, buffw, num - 1, NULL, NULL, NULL, NULL); 
        char* lpsz = new char[(unsigned int)len + 1]; 
        WideCharToMultiByte(CP_UTF8, 0, buffw, num - 1, lpsz, len, NULL, NULL);
        lpsz[len]='\0';
        delete[] buffw;
        
        string rtn(lpsz);
        delete[] lpsz;
        return rtn;
    }

    展开全文
  • 各种编码UNICODE、UTF-8、ANSI、ASCII、GB2312、GBK详解
  • [VC++]UTF8与ASCII格式互转

    千次阅读 2011-03-01 15:05:00
    [VC++]UTF8与ASCII格式互转

    first   convert   UTF-8   to   widechar,   then   convert   widechar   to   ANSI.
    here   is   code   snippets   converting   ANSI   to   UTF-8


    CString   aaa= "abc ";//CP_ACP   CP_UTF8
    wchar_t   wbuf[128];
    ZeroMemory(wbuf,sizeof(wbuf));
    int   nret=MultiByteToWideChar(CP_ACP,0,aaa,aaa.GetLength()+1,wbuf,sizeof(wbuf)/sizeof(wbuf[0]));
    if(nret> 0&&nret <sizeof(wbuf))
    {
    CFile   foutput;
    foutput.Open( "c://widechar.htm ",CFile::modeCreate|CFile::modeWrite);
    foutput.Write(wbuf,nret*2);
    foutput.Flush();
    foutput.Close();
    }

     


    char   uft8buf[1024];
    BOOL   busedefault=false;
    nret   =   WideCharToMultiByte(CP_UTF8,0,wbuf,nret,uft8buf,sizeof(uft8buf),NULL,NULL);
    if(nret> 0&&nret <sizeof(uft8buf))
    {
    CFile   foutput;
    foutput.Open( "c://utf8.htm ",CFile::modeCreate|CFile::modeWrite);
    foutput.Write(uft8buf,nret);
    foutput.Flush();
    foutput.Close();
    }

     

     

     

    VcunicodeUTF8相互转换

    vc下使用SQLite数据库时,由于SQL语句使用utf8 编码,而CString unicode编码。

    一,utf8 Unicode

    CString UTF8ToUnicode(char* UTF8)

    {

         DWORD dwUnicodeLen;        //转换后Unicode的长度

         TCHAR *pwText;            //保存Unicode的指针

         CString strUnicode;        //返回值

     

         //获得转换后的长度,并分配内存

         dwUnicodeLen = MultiByteToWideChar(CP_UTF8,0,UTF8,-1,NULL,0);

         pwText = new TCHAR[dwUnicodeLen];

         if (!pwText)

         {

             return strUnicode;

         }

     

         //转为Unicode

         MultiByteToWideChar(CP_UTF8,0,UTF8,-1,pwText,dwUnicodeLen);

     

         //转为CString

         strUnicode.Format(_T("%s"),pwText);

     

         //清除内存

         delete []pwText;

     

         //返回转换好的Unicode字串

         return strUnicode;

    }

     

    二,Unicodeutf8

    size_t CDGQDialog::g_f_wctou8(char * dest_str, const wchar_t src_wchar)

    {

         int count_bytes = 0;

         wchar_t byte_one = 0, byte_other = 0x3f; // 用于位与运算以提取位值0x3f--->00111111

         unsigned char utf_one = 0, utf_other = 0x80; // 用于"位或"置标UTF-8编码0x80--->1000000

         wchar_t tmp_wchar =L'0'; // 用于宽字符位置析取和位移(右移位)

         unsigned char tmp_char =L'0';

     

         if (!src_wchar)//

             return (size_t)-1;

     

         for (;;) // 检测字节序列长度

         {

             if (src_wchar <= 0x7f){ // <=01111111

                  count_bytes = 1; // ASCII字符: 0xxxxxxx( ~ 01111111)

                  byte_one = 0x7f; // 用于位与运算, 提取有效位值, 下同

                  utf_one = 0x0;

                  break;

             }

             if ( (src_wchar > 0x7f) && (src_wchar <= 0x7ff) ){ // <=0111,11111111

                  count_bytes = 2; // 110xxxxx 10xxxxxx[1](最多个位, 简写为*1)

                  byte_one = 0x1f; // 00011111, 下类推(1位的数量递减)

                  utf_one = 0xc0; // 11000000

                  break;

             }

             if ( (src_wchar > 0x7ff) && (src_wchar <= 0xffff) ){ //0111,11111111<=11111111,11111111

                  count_bytes = 3; // 1110xxxx 10xxxxxx[2](MaxBits: 16*1)

                  byte_one = 0xf; // 00001111

                  utf_one = 0xe0; // 11100000

                  break;

             }

             if ( (src_wchar > 0xffff) && (src_wchar <= 0x1fffff) ){ //UCS-4的支持..

                  count_bytes = 4; // 11110xxx 10xxxxxx[3](MaxBits: 21*1)

                  byte_one = 0x7; // 00000111

                  utf_one = 0xf0; // 11110000

                  break;

             }

             if ( (src_wchar > 0x1fffff) && (src_wchar <= 0x3ffffff) ){

                  count_bytes = 5; // 111110xx 10xxxxxx[4](MaxBits: 26*1)

                  byte_one = 0x3; // 00000011

                  utf_one = 0xf8; // 11111000

                  break;

             }

             if ( (src_wchar > 0x3ffffff) && (src_wchar <= 0x7fffffff) ){

                  count_bytes = 6; // 1111110x 10xxxxxx[5](MaxBits: 31*1)

                  byte_one = 0x1; // 00000001

                  utf_one = 0xfc; // 11111100

                  break;

             }

             return (size_t)-1; // 以上皆不满足则为非法序列

         }

         // 以下几行析取宽字节中的相应位, 并分组为UTF-8编码的各个字节

         tmp_wchar = src_wchar;

         for (int i = count_bytes; i > 1; i--)

         { // 一个宽字符的多字节降序赋值

             tmp_char = (unsigned char)(tmp_wchar & byte_other);///后位与byte_other 00111111

             dest_str[i - 1] = (tmp_char | utf_other);/// 在前面加----跟或

             tmp_wchar >>= 6;//右移位

         }

         //这个时候i=1

         //UTF-8第一个字节位处理,

         //第一个字节的开头"1"的数目就是整个串中字节的数目

         tmp_char = (unsigned char)(tmp_wchar & byte_one);//根据上面附值得来,有效位个数

         dest_str[0] = (tmp_char | utf_one);//根据上面附值得来1的个数

         // 位值析取分组__End!

         return count_bytes;

    }

    int CDGQDialog::g_f_wcs_to_pchar(CString& wstr,char * p)

    {

         wchar_t wc=L'1';

         char c[10]="1";//申请一个缓存

         size_t r=0; //size_t unsigned integer Result of sizeof operator

         int i=0;

         int j=0;

         for(i=0;i<wstr.GetLength();i++)

         {

             wc=wstr.GetAt(i);//得到一个宽字符

             r=g_f_wctou8(c,wc);//将一个宽字符按UTF-8格式转换到p地址

             if(r==-1)//出错判断

                  AfxMessageBox(_T("wcs_to_pchar error"));

             p[j]=c[0];//第一个值附给p

             j++;

             if(r>1)

             {

                  for(size_t x=1;x<r;x++)

                  {

                       p[j]=c[x];

                       j++;

                  }

             }

         }

         //p[j]='0';

         return 1;

     

    }

    三.转换实例

    void CMytestDlg::OnBnClickedButton2()

    {

         // TODO: 在此添加控件通知处理程序代码

         CString ccId=L"2007071";

         CString sql;

         char mySql[100];

         memset(mySql,0,sizeof(mySql));

         sql.Format(L"select cxrq,cxdw,dxrq,dxdw,fxrq,fxdw,cx,flx from j_clxx where trainnum_info_id ='%s'",ccId);

         //wchar_t sql=L'';

         g_f_wcs_to_pchar(sql,mySql);

         CString sql1 =UTF8ToUnicode(mySql);

         MessageBox(sql);

         //g_f_wctou8(mySql,sql);

    //  CString str_temp;

    //  for (int i=90;i<strlen(mySql);i++)

    //  {

    //       str_temp.Format(L"%c",mySql[i]);

    //       MessageBox(str_temp);

    //  }

     

    展开全文
  • 比较方便使用的java web开发转码小助手。 说明: 1,UTF-8ASCII,即中转英使用; 2,逆转时,直接用js可做到(本人很少用,略);
  • 实际开发中常用UTF-8编码格式,但实际上对各个编码之间的关系和区别还是不清楚,毕竟,字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码的知识。
  • utf8转换成asciiI have a java code and I want to convert it into Utf-8. How can I do it in console. By the way I have multiple files so it need to be do multiple conversion. 我有一个Java代码,我想将...
  • 本机字符(utf-8/gbk)转换成ASCII_JS版 中文国际化资源化
  • UTF-8''ASCII

    2018-01-30 21:12:11
    UTF-8''ASCII转换工具, 支持各种字符编码。对辅助编程有极大帮助
  • 彻底搞清楚ASCII,Unicode和UTF-8之间的关系

    千次阅读 多人点赞 2019-04-15 08:20:14
    前言 平时喜欢写东西,看博客,一直对编码有些懵,今天下午也不知道看到了什么,突然想了解下,就...1.ASCII 我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有0和1两种状态,因...
  • ASCII 码 我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有 0 和 1 两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以...
  • UTF-8ASCII

    千次阅读 2018-03-26 01:34:31
    用curl获取的网页源码,是UTF-8的,保存以后,从控制台输出,是一堆乱码比如原文件:控制台输出就是这样:看得出来中文没了- -,没中文怎么破,只有转码了,可以用 WideCharToMultiByte()函数:#include &...
  • ASCII码转化成UTF-8

    千次阅读 2019-07-14 06:18:51
    int AsciToUtf8(char* pSrc, unsigned int nSrcLen, char* pBuffer, unsigned int nBufferLen) { assert(pSrc != NULL); int nRet(0); int nUtf16Len = MultiByteToWideChar(CP_ACP, 0, pSrc, ...
  • ASCII、Unicode、GBK和UTF-8字符编码的区别联系
  • 字符编码的转换(ASCII与Utf8

    千次阅读 2019-04-23 16:29:07
    //ASCII to Unicode wstring AtoW(const std::string &str) { //unicode的长度 int nwLen = MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, nullptr, 0); //分配内存 wchar_t *pUnicode = (wc...
  • ASCII, LATIN1, UTF8 简介

    千次阅读 2018-05-02 09:28:38
    转载:http://blog.csdn.net/allen5200/article/details/6319832 ASCII-American Standard Code for Information Interchange ...ASCII 严格来讲就是7个bit大小的字符集,也就是code point介于0-127之间的字符
  • 最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大...
  • import java.io.File; import java.io.FileWriter; import java.io.IOException;... System.out.println("asciiutf-8="+AsciiToChineseString("\u8bf7\u767b\u5f55\u540e\u518d\u7ee7\u7eed\u3002")); } }
  • UTF-8转为ASCII

    千次阅读 2014-01-11 16:49:19
    一般从服务器上获取到的网页数据是UTF-8格式,要在对话框上显示正确无乱码,必须转成ASCII编码。 这种方法比较简单方便:  void ConvertUTF8ToANSI(char* strUTF8,CString &strANSI) //  {  int nLen = ...
  • 文件格式修改UTF-8与ASCII,GBK等等,某些软件不能呢个自动识别,可以使用这个软件来转换
  • ASCII、Unicode和UTF-8编码的区别

    万次阅读 多人点赞 2016-06-28 00:13:46
    UTF-8 1-6个字节,英文字母1个字节,汉字3个字节,生僻字4-6个字节 所有语言 具体解释:最早只有127个字母被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的...
  • python ascii编码和utf-8

    千次阅读 2018-09-08 10:45:41
    import sys ...UnicodeDecodeError: 'utf8' codec can't decode byte 0xc4 in position 0: invalid continuation byte 出现这个原因在于编码器默认的编码规则和得到的数据的编码不匹配 针对使用python...
  • 作为一个计算机专业的学生,大学四年的时间竟然从没仔细思考过编码解码的细节是惭愧的,只记得当年老师讲过的一条真理:”遇到编码的问题统一选utf8就好了”。知其然不知其所以然,我曾无数次鄙视过我的灵魂,...
  • ASCII,UNICODE,UTF8字符串互相转换的C++代码
  • ASCII,UTF-16,UTF-8编码的区别

    千次阅读 2018-07-08 13:39:15
    ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 156,694
精华内容 62,677
关键字:

utf8与ascii