zoukankan      html  css  js  c++  java
  • UTF8 ANSI 相互转换的函数

     1 #include <winnls.h>
     2 #include <malloc.h>
     3 LPCSTR AnsiToUtf8(LPCSTR Ansi)
     4 {
     5   int WLength = MultiByteToWideChar(CP_ACP, 0, Ansi, -1, NULL, 0);
     6   LPWSTR pszW = (LPWSTR) _alloca((WLength+1) * sizeof(WCHAR));
     7   MultiByteToWideChar(CP_ACP, 0, Ansi, -1, pszW, WLength);
     8   
     9   int ALength = WideCharToMultiByte(CP_UTF8, 0, pszW, -1, NULL, 0, NULL, NULL);
    10   LPSTR pszA = (LPSTR)_alloca( ALength + 1);
    11   WideCharToMultiByte(CP_UTF8, 0, pszW, -1, pszA, ALength, NULL, NULL);  
    12   pszA[ALength] = 0;
    13   
    14   return pszA;
    15 }
    16 
    17 LPCSTR WcharToUtf8(LPCWSTR szUnicode)
    18 {
    19   int ALength = WideCharToMultiByte(CP_UTF8, 0, szUnicode, -1, NULL, 0, NULL, NULL);
    20   LPSTR pszA = (LPSTR)_alloca( ALength + 1);
    21   WideCharToMultiByte(CP_UTF8, 0, szUnicode, -1, pszA, ALength, NULL, NULL);  
    22   pszA[ALength] = 0;
    23   
    24   return pszA;
    25 }
    26 
    27 LPCSTR Utf8toAnsi( LPCSTR utf8 )
    28 {  
    29   int WLength = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, NULL );
    30   LPWSTR pszW = (LPWSTR) _alloca( (WLength + 1) *sizeof(WCHAR) ) ;    
    31   MultiByteToWideChar(CP_UTF8, 0, utf8, -1, pszW, WLength );
    32   pszW[WLength] = 0;
    33   
    34   int ALength = WideCharToMultiByte(CP_ACP, 0, pszW, -1, NULL, 0, NULL, NULL);
    35   LPSTR pszA = ( LPSTR ) _alloca ( ALength + 1 );
    36   WideCharToMultiByte(CP_ACP, 0, pszW, -1, pszA, ALength, NULL, NULL);
    37   pszA[ALength] = 0;
    38   
    39   return pszA;
    40 }
    41 
    42 LPCWSTR Utf8toWchar( LPCSTR utf8 )
    43 {
    44   int WLength = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, NULL );
    45   LPWSTR pszW = (LPWSTR) _alloca( (WLength + 1) *sizeof(WCHAR) ) ;    
    46   MultiByteToWideChar(CP_UTF8, 0, utf8, -1, pszW, WLength );
    47   pszW[WLength] = 0;
    48   return pszW;
    49 }
     1 //测试代码
     2 
     3   TCHAR szBuf[1204] = { "我是中国人" };
     4   TRACE("%s/n", szBuf);
     5   strcpy( szBuf, AnsiToUtf8( szBuf ));
     6   TRACE("%s/n", szBuf);
     7   strcpy( szBuf, Utf8toAnsi(szBuf));
     8   TRACE("%s/n", szBuf);
     9 
    10   strcpy( szBuf, "浣犳槸鎴戠殑濂芥湅鍙嬪悧"); 
    11   TRACE("%s/n", szBuf);
    12   strcpy( szBuf, Utf8toAnsi( szBuf ) );
    13   TRACE("%s/n",  szBuf );
    14   strcpy( szBuf, AnsiToUtf8( szBuf ) );
    15   TRACE("%s/n",  szBuf );

    调试输出

    我是中国人 (CE D2 CA C7 D6 D0 B9 FA C8 CB 00)

    鎴戞槸涓浗浜?  (E6 88 91 E6 98 AF E4 B8 AD E5 9B BD E4 BA BA 00)

    我是中国人 (CE D2 CA C7 D6 D0 B9 FA C8 CB 00)

    浣犳槸鎴戠殑濂芥湅鍙嬪悧 (E4 BD A0 E6 98 AF E6 88 91 E7 9A 84 E5 A5 BD E6 9C 8B E5 8F 8B E5 90 97 00)

    你是我的好朋友吗 (C4 E3 CA C7 CE D2 B5 C4 BA C3 C5 F3 D3 D1 C2 F0 00 )

    浣犳槸鎴戠殑濂芥湅鍙嬪悧 (E4 BD A0 E6 98 AF E6 88 91 E7 9A 84 E5 A5 BD E6 9C 8B E5 8F 8B E5 90 97 00)

  • 相关阅读:
    do you believe it?
    Linux+Mono+Asp.net入门:00软件下载地址
    《行动英雄》李嘉诚讲演
    Js全局和局部变量_this关键字_《没有控件的ASPDONET》
    教学相长
    基于多线程和SOCKET的聊天室(原创附源码)【没有控件的ASP.NET】
    程序员学好英语啊
    SQL行列转换:报表_公司采购表_每个公司各采购了些什么产品
    关于文件后缀名的误解
    Linux+Mono+Asp.net入门+Asp.net:01.虚拟机安装
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/3131478.html
Copyright © 2011-2022 走看看