java转gb2312_字符编码转换_进制转换
(GB2312,GBK,JNI,HexTOS。。。//
/*
ASCII 英⽂⼀个字节
gb2312,gbk 中⽂两个字节,英⽂⼀个字节
在中⽂系统中ansi⼀般指gb2312或gbk
GB2312、GBK都属于双字节字符集 (DBCS)
Utf-8 中⽂三个字节,英⽂⼀个字节
Unicode 中⽂两个字节,英⽂两个字
*/
//
/
/
java语言使用的字符码集是
/*
GB2312 中国国家 标准码
ANSI码(American National Standards Institute)
美国国家  标准学会 的 标准码
ASCII码(America Standard Code for Information Interchange)美国信息交换标准码
你可以认为是不同的东西!
ANSI码仅在前126个与ASCII码相同
*/
//
//
/
*
/*
*  ⼆进制、⼋进制、⼗进制、⼗六进制转换  16进制和字符相互转换
*/
//
//
/*
java内部是使⽤16bit的unicode编码(UTF-16)来表⽰字符串的,⽆论中⽂英⽂都是2字节;
jni内部是使⽤UTF-8编码来表⽰字符串的,UTF-8是变长编码的unicode,⼀般ascii字符是1字节,中⽂是3字节;c/c++使⽤的是原始数据,ascii就是⼀个字节了,中⽂⼀般是GB2312编码,⽤两个字节来表⽰⼀个汉字。
*/
//
//
//  CodeConver.h
//
#ifndef CodeConver_H
#define CodeConver_H
namespaceCodeConvert
{
#include
#include
#include
#include
#include
#include
//  ANSI To Unicode
//  测试通过
wchar_t* ANSIToUnicode(constchar* str )
{
inttextlen ;
wchar_t* result;
textlen = MultiByteToWideChar( CP_ACP, 0, str,-1, NULL,0 );
if(textlen ==0)
{
returnNULL;
}
result = (wchar_t*)malloc((textlen+1)*sizeof(wchar_t));
memset(result,0,(textlen+1)*sizeof(wchar_t)); MultiByteToWideChar(CP_ACP, 0,str,-1,(LPWSTR)result,textlen ); returnresult;
}
/************************************************************************/
//  Unicode  To ANSI(美国国家标准码)
//  测试通过
//  [2/8/2012 liu]
/************************************************************************/
char* UnicodeToANSI(constwchar_t* str )
{
char* result;
inttextlen;
textlen = WideCharToMultiByte( CP_ACP, 0, str, -1, NULL, 0, NULL, NULL );
if(textlen ==0)
{
returnNULL;
}
result =(char*)malloc((textlen+1)*sizeof(char));
memset( result, 0, sizeof(char) * ( textlen + 1 ) );
WideCharToMultiByte( CP_ACP, 0, str, -1, result, textlen, NULL, NULL );
returnresult;
}
/************************************************************************/
//  UTF8 To Unicode
//  [2/8/2012 liu]
//  测试通过
/************************************************************************/
intUTF8ToUnicode(wchar_t* &result,constchar* utf8 )
{
inttextlen ;
textlen = MultiByteToWideChar( CP_UTF8, 0, (LPCSTR)utf8,-1, NULL,0 );
if(textlen == 0)
{
returnNULL;
}
result = (wchar_t*)malloc((textlen+1)*sizeof(wchar_t));
memset(result,0,textlen * 2 + 2);
intwidelen = MultiByteToWideChar(CP_UTF8, 0,(LPCSTR)utf8,-1,(LPWSTR)result,textlen ); returnwidelen-1;
}
/************************************************************************/
//  UnicodeToUTF8
//
//  [2/8/2012 liu]
/************************************************************************/
char* UnicodeToUTF8(constwchar_t* str )
{
char* result;
inttextlen;
textlen = WideCharToMultiByte( CP_UTF8, 0, str, -1, NULL, 0, NULL, NULL ); if(textlen == 0)
{
returnNULL;
}
result =(char*)malloc((textlen+1)*sizeof(char));
memset(result, 0, sizeof(char) * ( textlen + 1 ) );
WideCharToMultiByte( CP_UTF8, 0, str, -1, result, textlen, NULL, NULL ); returnresult;
}
/************************************************************************/
//  宽字符 转换为 多字符  Unicode - ANSI
//
//  [2/8/2012 liu]
/************************************************************************/
char* w2m(constwchar_t* wcs)
{
intlen;
char* buf;
if(wcs =NULL)
{
returnNULL;
}
len =wcstombs(NULL,wcs,0);
if(len == 0)
returnNULL;
buf = (char*)malloc(sizeof(char)*(len+1));
memset(buf, 0, sizeof(char) *(len+1));
len =wcstombs(buf,wcs,len+1);
returnbuf;
}
/************************************************************************/ //  多字符 转换为 宽字符  ANSI - Unicode
//
//  [2/8/2012 liu]
/************************************************************************/ wchar_t* multiByte_to_wideChar(constchar* mbs)
{
intlen;
wchar_t* buf;
if(mbs == NULL)
{
returnNULL;
}
len =mbstowcs(NULL,mbs,0);
if(len == 0)
returnNULL;
buf = (wchar_t*)malloc(sizeof(wchar_t)*(len+1));
memset(buf, 0, sizeof(wchar_t) *(len+1));
len =mbstowcs(buf,mbs,len+1);
returnbuf;
}
/************************************************************************/ //  ANSI To UTF8
//
//  [2/8/2012 liu]
/************************************************************************/ char* ANSIToUTF8(constchar* str)
{

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。