Unicode和ANSI之间转换 U2A/A2U轻松实现

摘要:
在上一篇博客中,我们描述了如何使用NotePad++实现Unicode ANSI之间的转换。在本文中,我们将学习如何使用封装的方法U2A和A2U来实现它。具体代码如下:1#ifndefUNICODEANSI_H_2#defineINCODEANSI_H_34#defineCoP_JP9325#defineCoP_CH9366#defineCop_KO9497#defineCoC_RU12518#defineCoR_EU

上一篇博客中描述了如何用NotePad++来实现Unicode ANSI之间的转换,这一篇中,我们将学习使用封装后的方法 U2A和A2U 来实现,具体代码如下:

 1 #ifndef UNICODEANSI_H_
 2 #define UNICODEANSI_H_
 3 
 4 #define CP_JP  932
 5 #define CP_CH  936
 6 #define CP_KO  949
 7 #define CP_RU  1251
 8 #define CP_EU  1252  // ENGLISH, FRENCH, GERMAN, ITALIAN, PORTUGUESE, SPANISH
 9 
10 class CUnicodeAnsi
11 {
12 public:
13    // UNICODE -> ANSI
14    static LPSTR U2A(LPCWSTR wStr, int iCodePage)
15    {
16       // Get ANSI string length.
17       int iLen = ::WideCharToMultiByte(iCodePage, 0, wStr, -1, NULL, 0, NULL, NULL);
18       if( 0 > iLen ) return NULL;
19       
20       char* aStr = new char[iLen];
21 
22       // Convert Unicode to ANSI.
23       int tmpLen = ::WideCharToMultiByte(iCodePage, 0, wStr, -1, aStr, iLen, NULL, NULL);
24       if( 0 > tmpLen ) return NULL;
25 
26       return aStr;
27    }
28 
29    // ANSI -> UNICODE
30    static LPCWSTR A2U(LPCSTR aStr, int iCodePage)
31    {
32       // Get Unicode string length.
33       int iLen = ::MultiByteToWideChar(iCodePage, 0, aStr, -1, NULL, 0);
34       if( 0 > iLen ) return NULL;
35 
36       wchar_t* uStr = new wchar_t[iLen];
37 
38       // Convert ANSI to Unicode.
39       int tmpLen = ::MultiByteToWideChar(iCodePage, 0, aStr, -1, uStr, iLen);
40       if( 0 > tmpLen ) return NULL;
41 
42       return uStr;
43    }
44 };
45 
46 #endif // UNICODEANSI_H_

免责声明:文章转载自《Unicode和ANSI之间转换 U2A/A2U轻松实现》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C#程序打包安装部署之生成Windows安装程序C陷阱与缺陷:如何判断编译器是否支持嵌套注释?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

存储过程参数CHAR传过来null导致超时.

调用的时候不要传NULL,可以传 '' ALTER PROCEDURE [dbo].[up_UC_GetUCExecuteEPList]@Code VARCHAR(3) ,--char(3)的时候传过来是NULL的话会超时..不为空的话char(3)效率高.ASBEGIN //………….. end;...

JS === null 和 “”空字符串的区别

// 今天看网站我也学到了,记录一下 null与空字符串主要区别如下: 1,null不指向任何对象,相当于没有任何值;而“”代表一个长度为0的字符串 2,null不分配内存空间;而“”会分配内存空间 转载了原文:https://www.cnblogs.com/hubbert123/p/7482960.html...

找出链表环的入口

问题: 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 分析:快慢指针+公式推导 参考:https://www.nowcoder.com/questionTerminal/253d2c59ec3e4bc68da16833f79a38e4?f=discussion(来源:牛客网) code: public classList...

mybatis There is no getter for property named 'xx' in 'class java.lang.String

用mybatis查询时,传入一个字符串传参数,且进行判断时,会报 There is no getter for property named 'moduleCode' in 'class java.lang.String 错误写法: <select id="queryAllParentModule" resultType="jobModule...

Fluent NHibernate example

http://www.codeproject.com/Articles/26466/Dependency-Injection-using-Spring-NET http://stackoverflow.com/questions/29767825/spring-netnhibernate-configuration http://nhbusinessob...

LruCache

importjava.util.LinkedHashMap; importjava.util.Map; public class LruCache2 extendsLinkedHashMap{ private intcap; public LruCache2(intcap){ super(16, 0.75f,true...