UNICODE混合编程
2016-05-06 22:38
381 查看
CreateWindowExA
MB unicode
UNICODE mb,
...混合编程, not the same,
NOTIFYICONDATA
HWND const *
Shell_NotifyIcon
显示分很多,情况!
UTF-8
UTF-8是一种8位的unicode字符集,编码长度是可变的,并且是ASCII字符集的严格超集,也就是说ASCII中每个字符的编码在UTF-8中是完全一样的。UTF-8字符集中,一个字符可能是1个字节,2个字节,3个字节或者4个字节长。一般来说,欧洲的字母字符长度为1到2个字节,而亚洲的大部分字符则是3个字节,附加字符为4个字节长。
Unix平台中普遍支持UTF-8字符集,HTML和大多数浏览器也支持UTF-8,而window和java则支持UCS-2。
UTF-8的主要优点:
对于欧洲字母字符需要较少的存储空间。
容易从ASCII字符集向UTF-8迁移。
UCS-2
UCS-2是固定长度为16位的unicode字符集。每个字符都是2个字节,UCS-2只支持unicode3.0,所以不支持附加字符。
UCS-2的优点:
对于亚洲字符的存储空间需求比UTF-8少,因为每个字符都是2个字节。
处理字符的速度比UTF-8更快,因为是固定长度编码的。
对于windows和java的支持更好。
UTF-16
UTF-16也是一种16位编码的字符集。实际上,UTF-16就是UCS-2加上附加字符的支持,也就是符合unicode4.0规范的UCS-2。所以UTF-16是UCS-2的严格超集。
UTF-16中的字符,要么是2个字节,要么是4个字节表示的。UTF-16主要在windows2000以上版本使用。
UTF-16相对UTF-8的优点,和UCS-2是一致的。
Oracle从7.0开始提供对Unicode的支持。Oracle个版本的unicode字符集支主要有:
AL32UTF8
一种UTF-8编码的字符集,支持最新的unicode4.0标准。字符长度为1,2或者3个字节,附加字符则为4字节长。
UTF8
支持unicode3.0的UTF-8编码方式。由于附加字符是在unicode3.1中提出的,UTF8不支持附加字符。但是unicode3.0已经为附加字符预留了编码空间,所以即使在UTF8的数据库中插入附加字符,也是可以的,只是数据库会将该字符分隔成两部分,需要占6个字符的长度。所以,如果需要支持附加字符,那么建议将数据库的字符集切换为新的AL32UTF8。
UTF8可用于数据库字符集,也可用于国家字符集。
UTFE
UTFE是基于EBCDIC平台的unicode字符集,就像ASCII平台上的UTF8一样。不同的是,UTFE中,每个字符可能占1,2,3或者4个字节,而附加字符则需要2个4个字节,也就是8个字节来表示。
AL16UTF16
AL16UTF16是一种UTF-16编码的unicode字符集,在Oracle中用于国家字符集。
AL24UTFFSS
该字符集只支持unicode1.1规范,在Oracle7.2~8i版本中使用,目前已经淘汰。
CString在Unicode下一个字节占16bit,在ascii下占8bit,改成char数组后在什么环境下都一样的
编写程序最好是:同一个源文件既可以在UNICODE下编译,又可以在ANSI下编译
工程--设置--C/C++--预处理器,可以定义标识符,如UNICODE,_UNICODE,标识是按ASCII编译,还是按UNICODE编译
This file defines ANSI-style macros for accessing arguments
* of functions which take a variable number of arguments.
* [ANSI]
*
synchronized..
god explaint everything in binary..
治疗失眠食用粥:山桑粥、莲子芡实粥。 体育锻炼:适当体育锻炼,增强体质,加重躯体疲劳感
dxtrans.h
ANSIToUTF8((char *)fast_writer.write(tasks).c_str(),&utf8_result);
Base64Encode(reinterpret_cast<const unsigned char*>(utf8_result.c_str()),utf8_result.length(),Base64Result);
Replace_plus(Base64Result);
SubmitResult(pci,Base64Result.c_str());
Base64Result.erase();
utf8_result.erase();
the logics..
表达式必须包含指向对象的指针。
good communication,
混,
保留一个较为稳定的版本。
善于总结,保留!、
string和unsigned char *互转,
二进制编码:GET utf8?
当然,有了STL,这些处理会得到很大的简化。我们可以使用 fstream来代替麻烦的fopen fread fclose, 用vector来代替数组。最重要的是用 string来代替char * 数组,使用sort排序算法来排序,用unique 函数来去重。听起来好像很不错。看看下面代码(例程1):
favorate and like,not same,
别人能给你说什么!
static_cast<const unsigned char *>(str.c_str());
对消息的处理中我们经常需要将WPARAM或LPARAM等32位数据(DWORD)分解成两个16位数据(WORD),例如:
LPARAM lParam;
WORD loValue = LOWORD(lParam); //取低16位
WORD hiValue = HIWORD(lParam); //取高16位
对于16位的数据(WORD)我们可以用同样的方法分解成高低两个8位数据(BYTE),例如:
WORD wValue;
BYTE loValue = LOBYTE(wValue); //取低8位
BYTE hiValue = HIBYTE(wValue); //取高8位
BYTE 8 and WORD 16 DWORD 32 bit,
unsigned char* pUC = new unsigned char[strContent.size()+1];
strcpy(pUC,strContent.c_str());
// use the pUC here
delete [] pUC;
void,
自适应大小, semantics,
serialize,
write so many, does,
别人不予,自取之, depends how you think about the problem, ha,
session meaning,
所见,所得,
从Vista开始,Windows服务(Services)也要分割开来了。如果以前用消息循环在服务之间传递信息的话,现在得换别的办法,例如用命名管道(Named Pipe)了。相关内容可参见:http://msdn2.microsoft.com/en-us/library/bb756986.aspx。
【讨论】真相是CreateProcessWithLogonW句柄泄漏!!!
http://bbs.pediy.com/archive/index.php?t-176330.html
void * is a miracle,
前者string是常用类型,可以看作char[],其实这正是与string定义中的
_Elem=char相一致。而wstring,使用的是wchar_t类型,这是宽字符,用于满足非ASCII字符的要求,例如Unicode编码,中文,日文,韩文什么的。对于wchar_t类型,实际上C++中都用与char函数相对应的wchar_t的函数,因为他们都是从同一个模板类似于上面的方式定义的。因此也有wcout, wcin, werr等函数。 实际上string也可以使用中文,但是它将一个汉字写在2个char中。而如果将一个汉字看作一个单位wchar_t的话,那么在wstring中就只占用一个单元,其它的非英文文字和编码也是如此。这样才真正的满足字符串操作的要求,尤其是国际化等工作。
+= 必须这么前后有空格么,
字库,
MB unicode
UNICODE mb,
...混合编程, not the same,
NOTIFYICONDATA
HWND const *
Shell_NotifyIcon
显示分很多,情况!
UTF-8
UTF-8是一种8位的unicode字符集,编码长度是可变的,并且是ASCII字符集的严格超集,也就是说ASCII中每个字符的编码在UTF-8中是完全一样的。UTF-8字符集中,一个字符可能是1个字节,2个字节,3个字节或者4个字节长。一般来说,欧洲的字母字符长度为1到2个字节,而亚洲的大部分字符则是3个字节,附加字符为4个字节长。
Unix平台中普遍支持UTF-8字符集,HTML和大多数浏览器也支持UTF-8,而window和java则支持UCS-2。
UTF-8的主要优点:
对于欧洲字母字符需要较少的存储空间。
容易从ASCII字符集向UTF-8迁移。
UCS-2
UCS-2是固定长度为16位的unicode字符集。每个字符都是2个字节,UCS-2只支持unicode3.0,所以不支持附加字符。
UCS-2的优点:
对于亚洲字符的存储空间需求比UTF-8少,因为每个字符都是2个字节。
处理字符的速度比UTF-8更快,因为是固定长度编码的。
对于windows和java的支持更好。
UTF-16
UTF-16也是一种16位编码的字符集。实际上,UTF-16就是UCS-2加上附加字符的支持,也就是符合unicode4.0规范的UCS-2。所以UTF-16是UCS-2的严格超集。
UTF-16中的字符,要么是2个字节,要么是4个字节表示的。UTF-16主要在windows2000以上版本使用。
UTF-16相对UTF-8的优点,和UCS-2是一致的。
Oracle从7.0开始提供对Unicode的支持。Oracle个版本的unicode字符集支主要有:
AL32UTF8
一种UTF-8编码的字符集,支持最新的unicode4.0标准。字符长度为1,2或者3个字节,附加字符则为4字节长。
UTF8
支持unicode3.0的UTF-8编码方式。由于附加字符是在unicode3.1中提出的,UTF8不支持附加字符。但是unicode3.0已经为附加字符预留了编码空间,所以即使在UTF8的数据库中插入附加字符,也是可以的,只是数据库会将该字符分隔成两部分,需要占6个字符的长度。所以,如果需要支持附加字符,那么建议将数据库的字符集切换为新的AL32UTF8。
UTF8可用于数据库字符集,也可用于国家字符集。
UTFE
UTFE是基于EBCDIC平台的unicode字符集,就像ASCII平台上的UTF8一样。不同的是,UTFE中,每个字符可能占1,2,3或者4个字节,而附加字符则需要2个4个字节,也就是8个字节来表示。
AL16UTF16
AL16UTF16是一种UTF-16编码的unicode字符集,在Oracle中用于国家字符集。
AL24UTFFSS
该字符集只支持unicode1.1规范,在Oracle7.2~8i版本中使用,目前已经淘汰。
CString在Unicode下一个字节占16bit,在ascii下占8bit,改成char数组后在什么环境下都一样的
编写程序最好是:同一个源文件既可以在UNICODE下编译,又可以在ANSI下编译
工程--设置--C/C++--预处理器,可以定义标识符,如UNICODE,_UNICODE,标识是按ASCII编译,还是按UNICODE编译
This file defines ANSI-style macros for accessing arguments
* of functions which take a variable number of arguments.
* [ANSI]
*
synchronized..
god explaint everything in binary..
治疗失眠食用粥:山桑粥、莲子芡实粥。 体育锻炼:适当体育锻炼,增强体质,加重躯体疲劳感
dxtrans.h
ANSIToUTF8((char *)fast_writer.write(tasks).c_str(),&utf8_result);
Base64Encode(reinterpret_cast<const unsigned char*>(utf8_result.c_str()),utf8_result.length(),Base64Result);
Replace_plus(Base64Result);
SubmitResult(pci,Base64Result.c_str());
Base64Result.erase();
utf8_result.erase();
the logics..
表达式必须包含指向对象的指针。
good communication,
混,
保留一个较为稳定的版本。
善于总结,保留!、
string和unsigned char *互转,
二进制编码:GET utf8?
当然,有了STL,这些处理会得到很大的简化。我们可以使用 fstream来代替麻烦的fopen fread fclose, 用vector来代替数组。最重要的是用 string来代替char * 数组,使用sort排序算法来排序,用unique 函数来去重。听起来好像很不错。看看下面代码(例程1):
favorate and like,not same,
别人能给你说什么!
static_cast<const unsigned char *>(str.c_str());
对消息的处理中我们经常需要将WPARAM或LPARAM等32位数据(DWORD)分解成两个16位数据(WORD),例如:
LPARAM lParam;
WORD loValue = LOWORD(lParam); //取低16位
WORD hiValue = HIWORD(lParam); //取高16位
对于16位的数据(WORD)我们可以用同样的方法分解成高低两个8位数据(BYTE),例如:
WORD wValue;
BYTE loValue = LOBYTE(wValue); //取低8位
BYTE hiValue = HIBYTE(wValue); //取高8位
BYTE 8 and WORD 16 DWORD 32 bit,
unsigned char* pUC = new unsigned char[strContent.size()+1];
strcpy(pUC,strContent.c_str());
// use the pUC here
delete [] pUC;
void,
自适应大小, semantics,
serialize,
write so many, does,
别人不予,自取之, depends how you think about the problem, ha,
session meaning,
所见,所得,
从Vista开始,Windows服务(Services)也要分割开来了。如果以前用消息循环在服务之间传递信息的话,现在得换别的办法,例如用命名管道(Named Pipe)了。相关内容可参见:http://msdn2.microsoft.com/en-us/library/bb756986.aspx。
【讨论】真相是CreateProcessWithLogonW句柄泄漏!!!
http://bbs.pediy.com/archive/index.php?t-176330.html
void * is a miracle,
前者string是常用类型,可以看作char[],其实这正是与string定义中的
_Elem=char相一致。而wstring,使用的是wchar_t类型,这是宽字符,用于满足非ASCII字符的要求,例如Unicode编码,中文,日文,韩文什么的。对于wchar_t类型,实际上C++中都用与char函数相对应的wchar_t的函数,因为他们都是从同一个模板类似于上面的方式定义的。因此也有wcout, wcin, werr等函数。 实际上string也可以使用中文,但是它将一个汉字写在2个char中。而如果将一个汉字看作一个单位wchar_t的话,那么在wstring中就只占用一个单元,其它的非英文文字和编码也是如此。这样才真正的满足字符串操作的要求,尤其是国际化等工作。
+= 必须这么前后有空格么,
字库,
相关文章推荐
- php防盗链实现
- 69 个经典 Spring 面试题和答案
- 20145305 《Java程序设计》实验五
- nyoj36 最长公共子序列
- 《java入门第一季》之面向对象(抽象类其实不抽象)
- 《java入门第一季》之面向对象(抽象类其实不抽象)
- Java语言程序设计期中考试试题
- 八.面向对象编程---学习笔记
- Github简单使用之上传代码
- 输入和输出
- Android开发环境搭建之Eclipse/AndroidStudio
- C#线程
- Swagger SpringMVC整合与简介
- Java中的实体类
- java产生正态分布随机数
- java线程内存模型,线程、工作内存、主内存
- Java之------类反射系列(一)
- 《Eclipse中的一些快捷键》
- 可变参数编程的三个宏
- SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)