unicode工程迁移(高分)解决思路

unicode工程迁移(高分)
项目以前不是UNICODE的,
由于用到了WINDOWS   TRUETYPE造字程序,而造字的GBK码位1500多个已经被用光了,
这时候想到了用UNICODE编码,TRUETYPE造字程序的UNICODE码位是6000多个。

现在的问题是起先的VC工程都是都是不支持UNICODE,对所有的字符交换操作的中间文件都是GBK编码,所用到的数据库ORACLE的内部编码也不是UNICODE,现在需要

1.将ORACLE数据库转为支持UNICODE的编码
2.VC工程需要通过界面显示UNICODE方式造的字
3.最后提交的XML文件要转化成UTF8编码方式

请问在这种情况下我将如何实施UNICODE迁移?????




------解决方案--------------------
数据库可以不用转吧,代码要慢慢改了。

比如 char szText[100];
要改成TCHAR szText[100];

当然你改成WCHAR szText[100]也可以,但是你将来还是会吃苦头!

写代码时,无论是什么工程,要习惯对于字符串的定义使用宏,而不要写死char或者wchar。否则只有哭的份。

相关的带t的宏有,_T(),LPCTSTR,LPTSTR,TCHAR,_tcscpy,_tcscat,_stprintf等,自己去查msdn吧。

用这些宏后,想在unicode和ascii之间切换,只需要修改stdafx.h中的#define UNICODE即可。代码基本不用再修改。

要提醒的是,用了这些宏并不是万能的,有的地方还得判断,比如memset一个TCHAR数组,比如和外部程序或者磁盘或者数据库交换数据,就得手动判断了。当然只要写的时候注意,是可以做到以后不再更改代码的
------解决方案--------------------
《windows核心编程》第二章,讲解关于unicode的编程的
按上面的要求做,基本上可以解决lz的问题
------解决方案--------------------
估计是个烦人的事情吧``用Ctrl+H,把代码里的字符类型都转成TCHAR``
------解决方案--------------------
1。数据库可以不用转如何支持所造的UNICODE字符呢?

发送给 数据库 时,将字符 UNICODE --> GBK ,获取后 GBK--> UNICODE.
WideCharToMultiByte , MultiByteToWideChar函数可能用于这方面的转换。

------解决方案--------------------
1. 宽字符处理函数函数与普通函数对照表

字符分类:

宽字符函数 普通C函数 描述
iswalnum() isalnum() 测试字符是否为数字或字母
iswalpha() isalpha() 测试字符是否是字母
iswcntrl() iscntrl() 测试字符是否是控制符
iswdigit() isdigit() 测试字符是否为数字
iswgraph() isgraph() 测试字符是否是可见字符
iswlower() islower() 测试字符是否是小写字符
iswprint() isprint() 测试字符是否是可打印字符
iswpunct() ispunct() 测试字符是否是标点符号
iswspace() isspace() 测试字符是否是空白符号
iswupper() isupper() 测试字符是否是大写字符
iswxdigit() isxdigit() 测试字符是否是十六进制的数字

大小写转换:

宽字符函数 普通C函数 描述
towlower() tolower() 把字符转换为小写
towupper() toupper() 把字符转换为大写

字符比较:

宽字符函数 普通C函数 描述
wcscoll() strcoll() 比较字符串

日期和时间转换:

宽字符函数 描述
strftime() 根据指定的字符串格式和locale设置格式
化日期和时间
wcsftime() 根据指定的字符串格式和locale设置格式
化日期和时间, 并返回宽字符串
strptime() 根据指定格式把字符串转换为时间值,
是strftime的反过程
打印和扫描字符串:

宽字符函数 描述
fprintf()/fwprintf() 使用vararg参量的格式化输出
fscanf()/fwscanf() 格式化读入
printf() 使用vararg参量的格式化输出到标准输出
scanf() 从标准输入的格式化读入
sprintf()/swprintf() 根据vararg参量表格式化成字符串
sscanf() 以字符串作格式化读入
vfprintf()/vfwprintf() 使用stdarg参量表格式化输出到文件
vprintf() 使用stdarg参量表格式化输出到标准输出
vsprintf()/vswprintf() 格式化stdarg参量表并写到字符串

数字转换:

宽字符函数 普通C函数 描述
wcstod() strtod() 把宽字符的初始部分转换为双精度浮点数
wcstol() strtol() 把宽字符的初始部分转换为长整数
wcstoul() strtoul() 把宽字符的初始部分转换为无符号长整数

多字节字符和宽字符转换及操作:

宽字符函数 描述
mblen() 根据locale的设置确定字符的字节数
mbstowcs() 把多字节字符串转换为宽字符串